我有一个这样的Scala类:
object MyClient {
private lazy val theClient: TheClient = new TheClient()
}
class MyClient {
import MyClient._
var client = null // this is only for unittest
def getSomethingFromTheClient() = {
if (client == null) client = theClient
client.getSomething() + " from MyClient"
}
}
其中一些代码只是为了方便单元测试,在那里我可以模拟TheClient并将其注入到MyClient中,如下所示(我使用的是Mockito):
val mockTheClient = mock[TheClient]
val testMyClient = new MyClient()
testMyClient.client = mockTheClient
testMyClient.getSomethingFromTheClient() shouldBe "blabla"
这是可行的,但看起来很丑陋。理想情况下,如果我可以将mockTheClient注入到伴生对象字段中,那就太好了。或者我还漏掉了什么?
发布于 2019-05-22 04:07:24
为什么不直接做依赖注入呢?
例如
lazy val client: TheClient = new TheClient()
class MyClient(client: => TheClient) {
def getSomethingFromTheClient() = {
client.getSomething() + " from MyClient"
}
}
然后在测试中
val mockTheClient = mock[TheClient]
val testMyClient = new MyClient(mockTheClient)
testMyClient.getSomethingFromTheClient() shouldBe "blabla"
https://stackoverflow.com/questions/56243430
复制相似问题