带有 scala 的 mockito:匹配器问题
Posted
技术标签:
【中文标题】带有 scala 的 mockito:匹配器问题【英文标题】:mockito with scala: matchers issue 【发布时间】:2022-01-23 02:05:02 【问题描述】:我嘲笑了一项服务。服务有一个方法'action',它接受一个MyCustomObject类型的对象并返回一个Future of Either。所以模拟一下:
when(myService.action(any[MyCustomObject]())).thenReturn(any[Future[Any]]())
我在概念上没有看到任何问题。我告诉 mockito 来模拟方法操作,这样每当它被任何类型为 MyCustomObject 的对象调用时,然后让它返回 Any 的 Future,因为我不关心 Future 中的值。
但它给了我错误:
When using matchers, all arguments have to be provided by matchers.
我的两个模拟值本质上都是通用的,那么这个错误的原因是什么?
【问题讨论】:
【参考方案1】:使用 Mockito 时,不能在 thenReturn
中传递 matcher:模拟的目的是定义任意返回值。
从概念上讲,Mockito 可能会为简单类型生成一些随机数据,但是您如何期望 Mockito 为它根本不知道的类型生成数据并且可能只接受一些特定值?
TL;DR:你必须提供一个返回值:
when(myService.action(any[MyCustomObject]()))
.thenReturn(Future.succesfull(Right(something)))
【讨论】:
以上是关于带有 scala 的 mockito:匹配器问题的主要内容,如果未能解决你的问题,请参考以下文章
OCHamcrest 匹配器参数与验证时的 Mockito 模拟不兼容
用于 PC Mockito 模拟验证的自定义 Hamcrest 匹配器