我正在尝试在测试中使用参数matcher。我下一个:
Mockito.`when`(someRepository.save(
argThat { it.name == someName } // Here I want to do mock for all objects with name someName
)).thenReturn(save(someEntity))
我会得到下一个错误:类型推理失败:没有足够的信息来推断fun when
中的参数t(p0:t!(:on nowerStubbing!
如何正确编写kotlin中的参数matcher?
我强烈建议使用Nhaarman的Mockito-Kotlin代替Vanilla Mockito。它具有许多优势,可以在Kotlin中使用较少的问题,因为Mockito旨在在Java中使用。您可以看到有关如何在Kotlin中使用参数匹配器的指南。您的示例看起来非常相似,但是类型推理的问题应该更少。
我通过从Java类添加参数匹配者找到了解决方案。我的IDE将其转换为Kotlin:
在Java中:
Mockito.when(someRepository.save(ArgumentMatchers.argThat(entity-> entity.getName().equals("someName")
&& entity.getDescription().equals("somedescritpion")
))));
在Kotlin中:
Mockito.`when`<Any>(someRepository.save(ArgumentMatchers.argThat { (name, _, description, ) ->
(name == "someName" && description == "somedescritpion"
)
}))
注意:如果您有一些不想在比赛中考虑的字段,则应添加_。
使用someRepository.save(Mockito.any<String>())
。只要您是String
,您就不会关心您传达的论点。空值也很重要。