你能提供比较两个对象状态的方法么?
是否有API可以实现这一功能?或者只有反射是答案?
请注意:我不需要简单的equals() / compare() 方法,因为它们只适用于排序,我需要整个对象图的比较,这将给我一个匹配或不匹配值列表作为结果。
Diffable<T>
接口,如果一个对象想要与其他对象进行深度比较,则可以实现该接口。类似于Comparable<T>
,该接口要求一个对象能够与同类型的另一个对象进行深度比较,并生成差异列表。DiffBuilder
类来帮助您实现Diffable.diff()
方法。CompareToBuilder.reflectionCompare(Object lhs, Object rhs, boolean compareTransients)
CompareToBuilder.reflectionCompare(Object lhs, Object rhs, String[] excludeFields) {
CompareToBuilder.reflectionCompare(Object lhs, Object rhs, boolean compareTransients, Class reflectUpToClass)
public void genericCompare(Object one, Object two) {
Fields [] oneFields = one.getClass().getFields();
Fields [] twoFields = two.getClass().getFields();
...
/** assuming they have the same number of fields */
for (int t = 0; t < oneFields.length; t++) {
System.out.println("Object one \'" + oneFields[t].getName() + "\' has value " + oneFields[t].get(one));
System.out.println("Object two \'" + twoFields[t].getName() + "\' has value " + twoFields[t].get(two));
}
}
XMLUnit 可以工作,它可以递归地比较 引用列表
,并且还有排除不想比较的字段的选项。
String expectedXML = "some xml";
String actualXML = "some xml";
DetailedDiff diff1 = new DetailedDiff(XMLUnit.compareXML(expectedXML, actualXML));
diff1.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
System.out.println("Differences found: " + diff1.getAllDifferences().toString());
RecursiveElementNameAndTextQualifier
比较两个 XML 片段中的所有元素和文本节点。允许识别具有相同内容但以不同顺序返回的复杂嵌套类型的元素可进行比较。
请参阅this。
很快我会在这里发布博客。
生成 XML
import com.thoughtworks.xstream.XStream;
public static String writeToXml(Object objectToWrite) {
XStream xstream = new XStream();
return xstream.toXML(objectToWrite);
}
依赖关系
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
</dependency>
XmlUnit
API 即可。 - Ankur Singhal