Hamcrest ArrayList匹配器

时间:2013-08-02 18:37:37

标签: java android mockito hamcrest

我正在尝试使用模拟并检查传递给模拟的参数是否正确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上使用布尔等于的匹配器?

1 个答案:

答案 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,它会自动为您检查大部分属性。