我正在尝试使用类的测试实现,并使用@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
是一个具有save
和get
功能的接口,SomeFunction
是真正的实现测试
在delegator.retrieve
内部,它调用someFunction.get
内部,我正在尝试查看它是否被调用并保存数据。
确保通过以下方式初始化模拟的创建和注入:
1( 在测试类上添加@RunWith(org.mockito.junit.MockitoJUnitRunner)
。
或
2( 将MockitoAnnotations.initMocks(this)
添加到您的@Before
方法中。
@Before
方法是在Mockito
施展其注入魔术后调用的,因此,您正在覆盖Mockito
创建和使用的间谍。如果你想有自己的要注入的对象实现(我假设它是SomeFunctionContract
(,那么你必须在属性上声明它,而不是在@Before
函数上声明它。
综上所述,我认为我们缺少您的代码的一些上下文。你能附加something
、Delegator
和testData
的代码吗?
已修复:
直接在间谍级别初始化实现:
@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
}
}