测试列表<byte []>是否相等

时间:2017-05-20 12:57:45

标签: java testing testng

我正在使用TestNG进行单元测试,现在我有一个方法来测试哪个返回List<byte[]>。以下是我的测试现在的样子:

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

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

问题是,是否有可能告诉TestNG执行List内容比较(在我的情况下为byte[]),不只是equals,而是Arrays.equals

或者我必须遍历List并自己对每个元素进行比较?

3 个答案:

答案 0 :(得分:1)

用法

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库添加到测试类路径中。

答案 1 :(得分:1)

断言会是这样的:

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

答案 2 :(得分:0)