有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    根据the Hamcrest tutorial,您可以使用以下任何一项来使用Object.equals进行比较:

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

    此外,^{}被专门定义为比较列表中对应位置的每个元素e1e2e1.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 ^{},它会自动为您检查大多数这些属性