Sha*_*yan 3 java unit-testing mockito stubbing argument-matcher
我正在尝试模拟一个类,并在调用模拟对象上的方法时返回一个存根的对象列表.让我们考虑以下代码:
interface MyRepositry{
public List<MyClass> getMyClassInstances(String str,Long id,List<Integer> statusList);
}
Run Code Online (Sandbox Code Playgroud)
我在上面的方法ivocation嘲笑如下:
when(myRepository.getMyClassInstances("1234", 200L, stubbedList)).thenReturn(stubbedMyClassInstanceList);
Run Code Online (Sandbox Code Playgroud)
哪里
stubbedList
Run Code Online (Sandbox Code Playgroud)
我是通过插入两个整数1和3.在实际通话创建列表也是我通过我构建出在这里有整数1和3点OT笔记列表是stubbedList对象,并在实际通话清单对象是不同的,但总是包含两个整数1和3.
stubbedMyClassInstanceList
Run Code Online (Sandbox Code Playgroud)
是MyClass实例的存根列表.
然而,当我运行测试时,mockito会返回一个空列表.我做了一些调试,我猜mockito无法匹配我正在使用的列表对象
when(..).thenReturn(..)
Run Code Online (Sandbox Code Playgroud)
呼叫和实际呼叫,因此找不到正确的签名.
我不能用
anyList()
Run Code Online (Sandbox Code Playgroud)
matcher因为我总是传递两个整数的列表(1和3).
我已经通过使用自定义解决了这个问题
ArgumentMatcher
Run Code Online (Sandbox Code Playgroud)
如下 :
class StatusMatcher extends ArgumentMatcher<List> {
public boolean matches(Object list) {
List statuses = ((List) list);
return (statuses.size() == 2 && statuses.contains(1) && statuses.contains(3));
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题是:
1)我猜测为什么短戳/嘲弄不正常?2)并且我使用的解决方案是正确的吗?
Mockito自然地equals()
用于参数匹配.该equals()
方法List<T>
指定如果两个列表包含相同顺序的相同元素,则它们被定义为相等.
你认为有用的自定义参数匹配器不考虑订单.
那么也许1和3的顺序错了List<T>
?
归档时间: |
|
查看次数: |
5143 次 |
最近记录: |