java Hamcrest阵列列表匹配器
我试图使用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)));
有人知道会在^{
# 1 楼答案
根据the Hamcrest tutorial,您可以使用以下任何一项来使用
Object.equals
进行比较:argThat(is(list))
argThat(is(equalTo(list))
argThat(equalTo(list))
此外,^{} 被专门定义为比较列表中对应位置的每个元素
e1
和e2
的e1.equals(e2)
仔细检查您是否完成了正确覆盖
equals
所需的所有操作:MyModel.equals
方法是否接收Object
参数而不是MyModel
?如果参数是除Object
之外的任何类型,则它不是正确的重写,也不起作用李>MyModel.equals
{a3}?你的equals
不太可能在另一个方向失败,但是不能保证equals
方法会在哪个对象上被调用李>hashCode
值是否返回相等的整数?在检查对象到对象的相等性之前,集合实现是free to check hash code equality as a "shortcut"李>要检查这些点,您可能需要专门为} ,它会自动为您检查大多数这些属性
equals
编写一个测试。我推荐Guava's ^{