我正在尝试使用mock,并检查传递到mock中的参数是否为正确的ArrayList<MyModel>
。我已经在MyModel
上定义了布尔equals
方法,但我找不到使用equals
方法的匹配器。我一直在写的匹配器只比较object_id,它们明显不同。我的测试看起来是这样的:
MainActivity activity = mock(MainActivity.class);
MyRequest subject = new MyRequest(activity);
ArrrayList<MyModel> list = ...;
subject.makeRequest();
verify(activity).handleSuccess(argThat(is(list)));
有人知道在MyModel
上使用布尔等号的匹配器吗?
根据Hamcrest教程,您可以使用以下任何一项来使用Object.equals
:进行比较
argThat(is(list))
argThat(is(equalTo(list))
argThat(equalTo(list))
此外,List.equals(Object)
被具体定义为对列表中相应位置的每个元素e1
和e2
的e1.equals(e2)
进行比较。
仔细检查您是否已经完成了正确覆盖equals
:所需的所有操作
- 您的
MyModel.equals
方法是否接收到Object
参数而不是MyModel
?如果参数是Object
以外的任何类型,则它不是一个适当的覆盖,也不会起作用 MyModel.equals
是否具有反射性、对称性、传递性和一致性?equals
不太可能在另一个方向上失败,但不能保证equals
方法会在哪个对象上被调用- 当两个对象相等时,它们的
hashCode
值是否返回相等的整数?集合实现可以在检查对象到对象的相等性之前,将哈希代码相等性作为"快捷方式"进行检查
要检查这些点,您可能需要专门为equals
编写一个测试。我推荐Guava的EqualsTester
,它会自动为您检查大多数属性。