我有一个名为SynonymsRequest的XML Beans接口:
public interface SynonymsRequest extends org.apache.xmlbeans.XmlObject {...}
我想测试两个SynonymsRequest实例是否相等:
SynonymsRequest s1 = SynonymsRequest.Factory.newInstance();
s1.setQueryText("blub");
s1.setRequesterId(BigInteger.valueOf(1));
SynonymsRequest s2 = SynonymsRequest.Factory.newInstance();
s2.setQueryText("guck");
s2.setRequesterId(BigInteger.valueOf(1));
我尝试了以下内容:
assertTrue(s1.equals(s2));
=>断言没有通过assertEquals(0, s1.compareTo(s2));
=>抛出ClassCastException assertEquals(0, s1.compareValue(s2));
=>断言没有通过(返回2,不可比较)assertTrue(s1.valueEquals(s2));
=>无论两个实例是否相等,总是返回true 那么这样做的正确方法是什么?
答案 0 :(得分:3)
如果它不影响程序的性能,您可以像这样比较它们:
assertTrue(s1.xmlText().equals(s2.xmlText()));
否则,我猜您必须编写自己的自定义比较器。
答案 1 :(得分:1)
据我了解,比较仅比较两个简单值。它无法扣除您想要的比较算法。
或者我不明白你到底是什么意思?
答案 2 :(得分:0)
XmlBeans不支持深度比较,因此您必须自己编写。不久之前,dev邮件列表上有一个关于模式识别比较的线程,但我不确定是什么东西成了它:
http://www.mail-archive.com/dev@xmlbeans.apache.org/msg01960.html
答案 3 :(得分:0)
一会儿注意到这一点 - 如果两个对象在制作时生成了toString()方法,那么你可以在对象的toString()方法上使用.equals。这些可以与相对易用性进行比较,因为它们将检查输出xml是否相等。