Java 测试列表<;字节[]>;为了平等
我使用TestNG进行单元测试,现在我有了一个方法来测试返回Java 测试列表<;字节[]>;为了平等,java,testing,testng,Java,Testing,Testng,我使用TestNG进行单元测试,现在我有了一个方法来测试返回列表的方法。下面是我的测试现在的样子: public List<byte[]> methodToTest(){ //... } @Test public void test(){ List<byte[]> expected; //... Assert.assertEquals(methodToTest(), expected); //now fails } 公共列表方法测试(){
列表的方法。下面是我的测试现在的样子:
public List<byte[]> methodToTest(){
//...
}
@Test
public void test(){
List<byte[]> expected;
//...
Assert.assertEquals(methodToTest(), expected); //now fails
}
公共列表方法测试(){
//...
}
@试验
公开无效测试(){
预期名单;
//...
Assert.assertEquals(methodToTest(),应为);//现在失败
}
问题是,是否可以让TestNG不仅使用equals
,而且使用数组.equals
执行列表
内容比较(字节[]
)
或者我必须遍历列表
,并自己对每个元素进行比较?用法
将以下代码复制到测试中:
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;
}
匹配器,列表>(相等(数组列表(预期))
,“项目”和“”){
@凌驾
受保护列表功能值(列表实际值){
返回数组列表(实际);
}
};
}
静态列表arrayToList(列出它){
列表结果=新建ArrayList();
用于(对象项:it){
结果.add(isArray(item)?Arrays.asList(array(item)):item);
}
返回结果;
}
静态布尔isArray(对象it){
返回它!=null&&it.getClass().isArray();
}
静态对象[]数组(对象数组){
int length=Array.getLength(数组);
对象[]结果=新对象[长度];
for(int i=0;i
注意:您需要将库添加到测试类路径中。用法
将以下代码复制到测试中:
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;
}
匹配器,列表>(相等(数组列表(预期))
,“项目”和“”){
@凌驾
受保护列表功能值(列表实际值){
返回数组列表(实际);
}
};
}
静态列表arrayToList(列出它){
列表结果=新建ArrayList();
用于(对象项:it){
结果.add(isArray(item)?Arrays.asList(array(item)):item);
}
返回结果;
}
静态布尔isArray(对象it){
返回它!=null&&it.getClass().isArray();
}
静态对象[]数组(对象数组){
int length=Array.getLength(数组);
对象[]结果=新对象[长度];
for(int i=0;i
注意:您需要将库添加到测试类路径中。断言如下:
Assert.assertTrue(Arrays.equals(byteArray1,byteArray2))断言将如下所示:
Assert.assertTrue(Arrays.equals(byteArray1,byteArray2))TestNG已经提供了一些深度断言,但是缺少具有List参数的断言:TestNG已经提供了一些深度断言,但是缺少具有List参数的断言:在字节[]上调用equals
将与使用==
相同,并且大部分会失败。您需要为返回列表中的每个元素调用Arrays.equals(byteArray1,byteArray2)
。我认为您需要使用循环来实现此目的。@反斜杠是的,这就是为什么我要问如何与数组进行比较。equals
,而不仅仅是equals
,您需要调用列表中的每个元素。@反斜杠悲伤。。。例如,在ScalaTest中,我们可以为测试提供定制的“比较器”…您可以做的事情是编写定制断言。我认为您可以很容易地重写所需的方法,以使其进行数组比较。在字节[]上调用equals
将与使用=
相同,并且大部分会失败。您需要为返回列表中的每个元素调用Arrays.equals(byteArray1,byteArray2)
。我认为您需要使用循环来实现此目的。@反斜杠是的,这就是为什么我要问如何与数组进行比较。equals
,而不仅仅是equals
,您需要调用列表中的每个元素。@反斜杠悲伤。。。例如,在ScalaTest中,我们可以为测试提供定制的“比较器”…您可以做的事情是编写定制断言。我认为你可以很容易地重写你需要的方法,让它也做数组比较