mockito InjectMocks不工作?

时间:2018-01-15 15:24:57

标签: unit-testing kotlin mockito

我正在尝试使用类的测试实现并使用@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是一个具有saveget函数的接口,SomeFunction是真正的实现测试

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

所有这一切,我认为我们错过了一些代码的上下文。您可以附上somethingDelegatortestData的代码吗?

答案 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
        }
    }