使用Mockito验证Collection <byte []>的相等性?</byte []>

时间:2011-11-24 18:37:47

标签: java comparison mockito

我正在使用Mockito进行单元测试,而且我遇到了一个我有哈希集合的问题,我想验证参数是否相同。

即。我有类似

的东西
Collection< byte[] > blobs = new ArrayList< byte[] >();

// Do some stuff, omitted for brevity

verify( mockStore ).setWhatever( eq( blobs ) );

这会失败,因为byte []上的'equals()'会进行引用比较(并且它不是相同的引用)。

比较两个byte []的集合,我是否缺少一些简单的东西?我需要使用一个特殊的匹配器进行比较吗?通常我会使用Arrays.equal(),但我不知道如何告诉Mockito使用它来比较元素。建议?

1 个答案:

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