【问题标题】:mockito InjectMocks not working?模拟 InjectMocks 不起作用?
【发布时间】:2018-01-15 15:24:56
【问题描述】:

我正在尝试使用一个类的测试实现,并使用@InjectMocks 将其注入到测试中,但它似乎没有注入它。我尝试使用 Spy 但这不起作用,而是创建了一个空白的模拟版本,而不是使用我在 @Before 函数中创建的版本

下面是我的测试代码:

@Before
fun setup() {
    someFunction = object : SomeFuntionContract {
        override fun save(test: String) {
            testData = test //breakpoint here but never executes
        }

        override fun get(): String {
            return testData
        }
    }
}

lateinit var testData : String

@InjectMocks
lateinit var delegator: Delegator


@Spy
lateinit var someFunction: SomeFunctionContract


@Test
fun testSomething{
    delegator.retrieve(something)

    Assert.assertTrue(someFunction.get() == "hello")
}

SomeFunctionContract.kt是具有saveget函数的接口,SomeFunction是真正的实现测试

delegator.retrieve 内部它调用someFunction.get,我正在尝试查看它是否被调用并保存数据。

【问题讨论】:

  • 请学习正确的缩进并使用它。这次我给你修好了。

标签: unit-testing kotlin mockito


【解决方案1】:

确保您通过以下方式初始化模拟的创建和注入:

1) 在测试类中添加@RunWith(org.mockito.junit.MockitoJUnitRunner)

2)MockitoAnnotations.initMocks(this) 添加到您的@Before 方法中。

【讨论】:

  • 嗨。是的,我已经在我的测试类之上包含了@RunWith(MockitoJUnitRunner::class)
【解决方案2】:

@Before 方法在Mockito 执行其注入魔法之后调用,因此,您将覆盖Mockito 创建和使用的间谍。如果您想拥有自己的要注入对象的实现(我假设它是SomeFunctionContract),那么您必须在属性上而不是在@Before 函数上声明它。

说了这么多,我认为我们缺少您的代码的一些上下文。能否附上somethingDelegatortestData的代码?

【讨论】:

  • 您好,我尝试在测试方法中初始化对象,但我仍然遇到一个问题,即它永远不会触发我定义的已实现的 someFucntion。 Delegator 类有一个 @inject lateinit var someFunction : SomeFunctionContract 可以使用 dagger 2 实时工作,但当我尝试在我的测试代码上添加一个模拟实现时却没有
  • 是的,我让它工作了。在@spy lateinit var someFunction 下我直接在那里设置了测试实现
【解决方案3】:

固定:

直接在间谍级别初始化实现:

@Spy
lateinit var someFunction: SomeFunctionContract =  = object : SomeFuntionContract {
        override fun save(test: String) {
            testData = test //breakpoint here but never executes
        }

        override fun get(): String {
            return testData
        }
    }

【讨论】:

  • 不需要lateinit,我相信你只需要一个等于
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多