我想使用doReturn(sth).when(underTest).someFunc()而不是when(underTest.someFunc()).thenReturn(sth)。
(我不想在someFunc() -https://stackoverflow.com/a/29394497/541624中实际执行任何东西)
在Java语言中,我可以做underTest = Mockito.spy(new SomeClass(someParam));
我得到了:
Mockito cannot mock/spy because :
- final class发布于 2019-04-16 23:06:33
不能模拟/监视Kotlin类的原因是它们是最终类(默认情况下)。所以Mockito不能模拟这样的类,除非你把关键字open。
Mockito版本2引入了一个特性,允许您模拟/监视最终类。
该怎么做呢?添加带有其他模拟v2依赖项的mockito-inline依赖项。例如:testImplementation 'org.mockito:mockito-inline:2.8.9'
然后照常使用mockito方法。
这是一个虚拟测试,它演示了如何模拟一个方法而不做任何事情。
class Foo {
var xval = 0
fun foo(x: Int, y: Int): Int = x / y
fun bar(x: Int) {
xval = x
}
}
class FooTest {
@Test
fun fooTest() {
val foo = Mockito.mock(Foo::class.java)
Mockito.doAnswer(Answers.RETURNS_DEFAULTS).`when`(foo).foo(10, 2)
assertEquals(0, foo.foo(10, 2))
Mockito.doNothing().`when`(foo).bar(100)
assertEquals(0, foo.xval)
}
}正如您所看到的,您可以为返回某些内容的方法返回默认值,或者不为void方法返回任何内容。
否则,您可以使用没有此问题的mockk https://mockk.io/库。
说到这里,我建议您考虑一下是否可以使用接口/抽象类,而不是这里的具体类。这是使用mocking抽象化依赖的最好方法。
https://stackoverflow.com/questions/55697545
复制相似问题