首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将模拟对象注入伴生对象字段

将模拟对象注入伴生对象字段
EN

Stack Overflow用户
提问于 2019-05-22 01:20:01
回答 1查看 448关注 0票数 -2

我有一个这样的Scala类:

代码语言:javascript
复制
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):

代码语言:javascript
复制
val mockTheClient = mock[TheClient]
val testMyClient = new MyClient()
testMyClient.client = mockTheClient
testMyClient.getSomethingFromTheClient() shouldBe "blabla"

这是可行的,但看起来很丑陋。理想情况下,如果我可以将mockTheClient注入到伴生对象字段中,那就太好了。或者我还漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-22 04:07:24

为什么不直接做依赖注入呢?

例如

代码语言:javascript
复制
lazy val client: TheClient = new TheClient()

class MyClient(client: => TheClient) {
  def getSomethingFromTheClient() = {
    client.getSomething() + " from MyClient" 
  }
}

然后在测试中

代码语言:javascript
复制
val mockTheClient = mock[TheClient]
val testMyClient = new MyClient(mockTheClient)
testMyClient.getSomethingFromTheClient() shouldBe "blabla"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56243430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档