【发布时间】:2018-09-18 15:12:45
【问题描述】:
给定以下类(用 kotlin 编写):
class Target {
fun <R> target(filter: String, mapper: (String) -> R): R = mapper(filter)
}
我可以在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;
}
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)
}
kotlin 版本我收到如下异常:
java.lang.IllegalStateException: Mockito.argThat<String> { true } must not be null
为什么会发生这种情况以及如何使用 kotlin 进行测试?
【问题讨论】:
-
显然可以为空的类型存在问题...请参见此处:medium.com/@elye.project/…
-
谢谢@GiacomoAlzetta,你说得对,这是一个空类型的问题,我可以按照中等帖子解决。