Kotlin 的参数匹配器
ArgumentMatcher for Kotlin
我正在尝试在我的测试中使用 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?
我强烈建议使用 nhaarman's mockito-kotlin instead of vanilla Mockito. It has numerous advantages that allow it to be used with fewer issues in Kotlin as Mockito is designed for use in Java. You can see this guide 了解如何在 Kotlin 中使用参数匹配器。您的示例看起来非常相似,但类型推断的问题应该更少。
使用 someRepository.save(Mockito.any<String>())
。只要它是 String
,它就不会关心你传递的是什么参数。空值也算在内。
我通过从 java class 添加 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"
)
}))
注意:如果您有一些您不想在匹配器中考虑的字段,您应该添加 _。
我正在尝试在我的测试中使用 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?
我强烈建议使用 nhaarman's mockito-kotlin instead of vanilla Mockito. It has numerous advantages that allow it to be used with fewer issues in Kotlin as Mockito is designed for use in Java. You can see this guide 了解如何在 Kotlin 中使用参数匹配器。您的示例看起来非常相似,但类型推断的问题应该更少。
使用 someRepository.save(Mockito.any<String>())
。只要它是 String
,它就不会关心你传递的是什么参数。空值也算在内。
我通过从 java class 添加 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"
)
}))
注意:如果您有一些您不想在匹配器中考虑的字段,您应该添加 _。