代码之家  ›  专栏  ›  技术社区  ›  ademar111190

Mockito的参数在Kotlin中返回null

  •  2
  • ademar111190  · 技术社区  · 6 年前

    给定以下类(用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进行测试?

    0 回复  |  直到 6 年前