1

我正在尝试在我的测试中使用 ArgumentMatcher。我接下来做:

Mockito.`when`(someRepository.save(
        argThat { it.name == someName } // Here I want to do mock for all objects with name someName
    )).thenReturn(save(someEntity))

我得到下一个错误:类型推断失败:没有足够的信息来推断有趣的参数 T when(p0:T!):OngoingStubbing!

在 Kotlin 中如何正确编写 ArgumentMatcher?

4

3 回答 3

2

我强烈建议使用nhaarman 的 mockito-kotlin而不是 vanilla Mockito。由于 Mockito 是为在 Java 中使用而设计的,因此它具有许多优点,可以在 Kotlin 中使用更少的问题。您可以查看本指南,了解如何在 Kotlin 中使用参数匹配器。您的示例看起来非常相似,但类型推断的问题应该更少。

于 2019-07-29T15:20:44.060 回答
0

使用someRepository.save(Mockito.any<String>()). 只要它是一个String. 空值也很重要。

于 2019-07-29T15:25:41.220 回答
0

我通过从 java 类中添加 ArgumentMatcher 找到了解决方案。我的 IDE 将其转换为 Kotlin:

在java中:

Mockito.when(someRepository.save(ArgumentMatchers.argThat(entity-> entity.getName().equals("someName")
            && entity.getDescription().equals("somedescritpion")
            ))));

在科特林:

Mockito.`when`<Any>(someRepository.save(ArgumentMatchers.argThat { (name, _, description, ) ->
        (name == "someName" && description == "somedescritpion"
                )
    }))

注意:如果您不想在匹配器中考虑某些字段,则应添加 _。

于 2019-07-30T06:53:45.437 回答