我来自Java背景,我正在尝试使用Scala编写UnitTests。
我的班级如下:
import com.softwaremill.sttp.{HttpURLConnectionBackend, Uri, sttp}
class MyClient(endpoint: String, principal: String) {
private implicit val serialization = org.json4s.native.Serialization
private implicit val backend = HttpURLConnectionBackend()
def getDataSet(id: String) : Option[DataSet] = {
//sttp.get(url).send <-- will use 'bakend'
}
}
这里隐式变量“backend”用于插入HTTP客户端实现。
在UnitTest中,我应该插入SttpBackendStub。
implicit val testingBackend = SttpBackendStub.synchronous
.whenRequestMatches(_.uri.path.startsWith("/dataSet"))
.thenRespond(dataSetJson)
val client = new MyClient("http://dummy", "dummy")
但是当我初始化MyClient示例时,它仍然会使用HttpURLConnectionBackend而不是SttpBackendStub
在测试过程中,是否有将“testingBackend”摄取到MyClient中的解决方法?
1条答案
按热度按时间vuv7lop31#
这里使用implicit是让你认为问题比实际情况更复杂。您直接在
MyClient
中示例化HttpURLConnectionBackend
,因此这就是您将获得的“后端”。如果你想使用一个不同的,你必须把它传递给MyClient。您可以给予它一个默认值以供生产使用,但在测试中示例化它时传递一个mock。在你的测试中: