所以,我正在尝试实现一个函数,它将使用Introspector和PropertyDescriptor来比较同一个类的两个对象的所有字段。我遇到的问题是数组。
我已经使用PropertyDescriptor将每个字段的Get方法作为Methods获取,其中一个字段是一个数组。我知道它是一个byte [],但我希望该方法能够处理任何类型的数组。不幸的是,Method.invoke(Object o ...)的返回类型是Object,它不能插入任何AssertArrayEquals()方法。
投射似乎不起作用,而且我对仿制药的理解显然不符合要求。你会如何比较这两个阵列?
Method method = propertyDescriptor.getReadMethod();
if(method.getReturnType().isArray()){
Assert.assertArrayEquals(method.invoke(obj1), method.invoke(obj2));
}
答案 0 :(得分:0)
看看Hamcrest。
假设以下测试类:
public class TestObject {
private byte[] content;
public byte[] getContent() {
return content;
}
public void setContent(byte[] content) {
this.content = content;
}
}
您可以像这样比较内容字段:
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
[...]
PropertyDescriptor propertyDescriptor = new PropertyDescriptor("content", TestObject.class);
Method readMethod = propertyDescriptor.getReadMethod();
assertThat(readMethod.invoke(testObject1), equalTo(readMethod.invoke(testObject2)));
这适用于数组和非数组字段,Hamcrest会为您进行检查。