繁体   English   中英

测试清单 <byte[]> 为了平等

[英]Testing List<byte[]> for equality

我使用TestNG进行单元测试,现在有了一种方法来测试返回List<byte[]> 这是我的测试现在的样子:

public List<byte[]> methodToTest(){
   //...
}

@Test
public void test(){
    List<byte[]> expected;
    //...
    Assert.assertEquals(methodToTest(), expected); //now fails
}

问题是,是否可以告诉TestNG不仅使用equals ,还可以使用Arrays.equals执行List内容比较(在我的情况下为byte[] )?

还是我必须遍历List并自己比较每个元素?

用法

assertThat(methodToTest(), deepEqual(expected));

将以下代码复制到测试中:

Matcher<List<?>> deepEqual(List<?> expected) {
    return new FeatureMatcher<List<?>, List<?>>(equalTo(arrayToList(expected))
                                               ,"items", "") {
        @Override
        protected List<?> featureValueOf(List<?> actual) {
            return arrayToList(actual);
        }
    };
}

static List<?> arrayToList(List<?> it) {
    List<Object> result = new ArrayList<>();
    for (Object item : it) {
        result.add(isArray(item) ? Arrays.asList(array(item)) : item);
    }
    return result;
}

static boolean isArray(Object it) {
    return it != null && it.getClass().isArray();
}

static Object[] array(Object array) {
    int length = Array.getLength(array);
    Object[] result = new Object[length];
    for (int i = 0; i < length; i++) {
        result[i] = Array.get(array, i);
    }
    return result;
}

注意 :您需要在测试类路径中添加org.hamcrest:hamcrest-all:1.3库。

断言将如下所示:

Assert.assertTrue(Arrays.equals(byteArray1,byteArray2))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM