AssertArrayEquals对Method Invoke的结果

时间:2015-07-16 17:43:05

标签: java arrays methods junit

所以,我正在尝试实现一个函数,它将使用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));
}

1 个答案:

答案 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会为您进行检查。