莫吉托的情商呼叫不应该等于吗?


List<Bucket> bucketList = new ArrayList<Bucket>(50);
// Populate bucketList and use it to run the test
verify(mockDao).createSomething(anyMapOf(Long.class, Long.class), eq(bucketList));

从AbstractList继承的ArrayList的equals调用其成员的"equals",而"Bucket"确实实现了"equals"。但是,调试器从未在Bucket的equals方法中停止。我是不是错过了什么?

顺便说一句,"eq"是org.mockito.Matchers.eq.

实际上org.mockito.Matchers.eq使用org.mockito.internal.matchers.Equality.areEqual(Object o1, Object o2)方法来检查给定匹配器与传递给该方法的实际值的相等性。有趣的是,这个方法的实现是从hamcrest窃取的,正如评论中所说:

//stolen from hamcrest because I didn't want to have more dependency than Matcher class 
//...
public static boolean areEqual(Object o1, Object o2) {
    if (o1 == o2 ) {
        return true;
} else if (o1 == null || o2 == null) {
        return o1 == null && o2 == null;
    } else if (isArray(o1)) {
        return isArray(o2) && areArraysEqual(o1, o2);
    } else {
        return o1.equals(o2);
    }
}

在该方法的最开始处放置一个断点,以查看您自己的代码中发生了什么。由于将ArrayList传递给eq()的自变量,因此可能需要更深入地研究areArraysEqualareArrayLengthsEqual方法

相关内容

  • 没有找到相关文章

最新更新