我正在使用Mockito进行单元测试,而且我遇到了一个我有哈希集合的问题,我想验证参数是否相同。
即。我有类似
的东西Collection< byte[] > blobs = new ArrayList< byte[] >();
// Do some stuff, omitted for brevity
verify( mockStore ).setWhatever( eq( blobs ) );
这会失败,因为byte []上的'equals()'会进行引用比较(并且它不是相同的引用)。
比较两个byte []的集合,我是否缺少一些简单的东西?我需要使用一个特殊的匹配器进行比较吗?通常我会使用Arrays.equal(),但我不知道如何告诉Mockito使用它来比较元素。建议?
答案 0 :(得分:4)
没有deepEquals mockito匹配器。但是,您可以在某个测试帮助程序中编写一个代码,例如:
public static Collection<byte[]> sameHashes(Collection<byte[]> hashes) {
class CollectionOfHashesMatcher extends ArgumentMatcher<Collection<byte[]>> {
public boolean matches(Collection<byte[] actualListOfHashes) { /* ... */ }
public void describeTo(Description description) { /* ... */ }
};
return argThat(new CollectionOfHashesMatcher(hashes));
}
哪个应该像以下那样:
verify(mockStore).setWhatever(sameHashes(blobs));