我正在尝试使用模拟并检查传递给模拟的参数是否正确ArrayList<MyModel>
。我在equals
上定义了布尔MyModel
方法,但我找不到使用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
上使用布尔等于的匹配器?
答案 0 :(得分:0)
根据the Hamcrest tutorial,您可以使用Object.equals
来比较以下任何内容:
argThat(is(list))
argThat(is(equalTo(list))
argThat(equalTo(list))
此外,List.equals(Object)
专门用于比较列表中相应位置的每个元素e1.equals(e2)
和e1
的{{1}}。
仔细检查您是否已完成正确覆盖e2
所需的一切:
equals
方法是否会收到MyModel.equals
参数而不是Object
?如果参数是MyModel
以外的任何类型,则它不是正确的覆盖,并且不起作用。Object
reflective, symmetric, transitive, and consistent?您的MyModel.equals
不太可能在另一个方向失败,但无法保证调用equals
方法的对象。equals
值是否返回相等的整数?在检查对象与对象之间的相等性之前,集合实现是free to check hash code equality as a "shortcut"。要检查这些点,您可能需要专门针对hashCode
编写测试。我推荐Guava's EqualsTester
,它会自动为您检查大部分属性。