ade*_*190 9 java mockito kotlin
给定以下类(用 kotlin 编写):
class Target {
fun <R> target(filter: String, mapper: (String) -> R): R = mapper(filter)
}
Run Code Online (Sandbox Code Playgroud)
我可以在java中测试,测试代码:
@Test
public void testInJava() {
Target mockTarget = Mockito.mock(Target.class);
Mockito.when(mockTarget.target(
argThat(it -> true),
Mockito.argThat(it -> true)
)).thenReturn(100);
assert mockTarget.target("Hello World", it -> 1) == 100;
}
Run Code Online (Sandbox Code Playgroud)
java 测试按预期通过,但同样的测试是用 kotlin 编写的:
@Test
fun test() {
val mockTarget = Mockito.mock(Target::class.java)
Mockito.`when`(mockTarget.target(
Mockito.argThat<String> { true },
mapper = Mockito.argThat<Function1<String, Int>>({ true }))
).thenReturn(100)
assert(mockTarget.target("Hello World") { 1 } == 100)
}
Run Code Online (Sandbox Code Playgroud)
kotlin 版本我收到以下异常:
java.lang.IllegalStateException: Mockito.argThat<String> { true } must not be null
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我如何使用 kotlin 进行测试?
2022 年,Mockito-Kotlin 正式解决了该问题。
修复非常简单:只需从包中导入argThat/ eq/... mockito-kotlin,而不是mockito包,一切就完成了!
相关: https: //github.com/mockito/mockito-kotlin/wiki/Mocking-and-verifying
| 归档时间: |
|
| 查看次数: |
2836 次 |
| 最近记录: |