[英]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.