我正在使用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
并自己对每个元素进行比较?
答案 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)