如何使用 Mockito 测试扩展功能?它似乎不太好用。
这是我的扩展功能
fun <T> CrudRepository<T, String>.findOneById(id: String): T? {
val o = findById(id)
return if (o.isPresent) o.get() else null
}
这就是我想要测试的
@Test
fun getIslandById() {
//given
BDDMockito.given(islandRepository.findOneById("islandId1"))
.willReturn(IslandEntity(tileList, "1", "islandId1")) //findOneById is my extension function
//when
val island = islandService.getIslandById("islandId1")
//then
Assertions.assertThat(island?.id).isEqualTo("islandId1")
}
但是前面的测试抛出以下错误
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
IslandEntity cannot be returned by findById()
findById() should return Optional
有任何想法吗?
正如我在上面的评论中所说,字节码扩展函数只不过是接受接收者作为第一个参数的静态函数。因此你不能用 Mockito 模拟扩展函数,因为它不能模拟静态函数。
如果findById(id)
由 Repository 实现而不是其他扩展功能,您可以做的是下一个:
findById(id)
代替的模拟返回值。
看看下面的示例代码:
@Test
fun getIslandById() {
//given
BDDMockito.given(islandRepository.findById("islandId1"))
.willReturn(Optional.of(IslandEntity(tileList, "1", "islandId1"))) //mock findById function
//when
val island = islandService.getIslandById("islandId1")
//then
Assertions.assertThat(island?.id).isEqualTo("islandId1")
}
通过这种方式,您可以通过提供一个您希望它操作的模拟值来间接模拟您的扩展。
注意:您在上面发布的错误表明您findById(id)
应该返回一个可选的。因此,findById(id)
通过调用Optional.of(result)
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句