我正在尝试使用类的测试实现并使用@InjectMocks
将其注入测试,但它似乎没有注入它。我尝试使用间谍但是没有用,而是创建了一个空白的模拟版本,而不是使用我在@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
,我正在尝试查看它是否被调用并保存数据。
答案 0 :(得分:0)
确保通过以下方式初始化模拟的创建和注入:
1)在测试类上添加@RunWith(org.mockito.junit.MockitoJUnitRunner)
。
或
2)将MockitoAnnotations.initMocks(this)
添加到@Before
方法。
答案 1 :(得分:0)
在@Before
执行注入魔术之后调用Mockito
方法,因此,您将覆盖由Mockito
创建和使用的间谍。如果你想要自己实现要注入的对象(我假设它是SomeFunctionContract
),那么你必须在属性而不是@Before
函数上声明它。 / p>
所有这一切,我认为我们错过了一些代码的上下文。您可以附上something
,Delegator
和testData
的代码吗?
答案 2 :(得分:0)
修正:
直接在间谍级别初始化实施:
@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
}
}