1

我正在尝试使用模拟并检查传递给模拟的参数是否正确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

4

1 回答 1

0

根据Hamcrest 教程,您可以使用以下任何一项进行比较Object.equals

  • argThat(is(list))
  • argThat(is(equalTo(list))
  • argThat(equalTo(list))

此外,List.equals(Object)专门定义为比较e1.equals(e2)每个元素e1e2列表中的相应位置。

仔细检查您是否已完成正确覆盖所需的一切equals

  • 您的MyModel.equals方法是否接收Object参数而不是MyModel? 如果参数是 以外的任何类型Object,则它不是正确的覆盖并且将不起作用。
  • MyModel.equals 反射的、对称的、传递的和一致的吗?您不太可能equals在另一个方向上失败,但不能保证调用该equals方法的对象。
  • 当两个对象相等时,它们的hashCode值是否返回相等的整数?在检查对象到对象的相等性之前,集合实现可以自由地检查哈希码相等性作为“快捷方式” 。

要检查这些点,您可能需要专门为equals. 我推荐Guava'sEqualsTester,它会自动为您检查大多数这些属性。

于 2013-08-05T21:16:38.157 回答