java - 验证 Collection<byte[]> 与 Mockito 的相等性?

标签 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 使用它来比较元素。有什么建议吗?

最佳答案

没有 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));

关于java - 验证 Collection<byte[]> 与 Mockito 的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8261337/

相关文章:

java - 如何发现方法中必须使用什么参数格式?

javascript - Javascript 中的 != 和 !== 有什么区别?

matlab - 两个矩阵的高效比较 MATLAB

java - 使用模拟服务进行 H2 数据库测试会出现空指针异常

java - 两次模拟相同的语句

java - Spring MVC - 动态错误处理页面

java - 使用 Mockito 和 PowerMockito 模拟类对象

testing - 使用类参数与实际对象参数的 Mockito 模拟方法

java - java路径和总指挥官的问题

c# - 有没有更有效的方法来协调大型数据集?