1

我有一个名为 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));

我尝试了以下方法:

  1. assertTrue(s1.equals(s2));=> 断言不通过
  2. assertEquals(0, s1.compareTo(s2));=> 抛出 ClassCastException
  3. assertEquals(0, s1.compareValue(s2));=> 断言不通过(返回 2,不可比较)
  4. assertTrue(s1.valueEquals(s2));=> 始终返回 true,无论两个实例是否相等

那么这样做的正确方法是什么?

4

4 回答 4

3

如果它不影响您的程序的性能,您可以像这样比较它们:

assertTrue(s1.xmlText().equals(s2.xmlText()));

否则,我想您将不得不编写自己的自定义比较器。

于 2011-10-17T17:49:23.127 回答
1

据我了解,比较仅比较两个简单的值。它不能扣除您想要的比较算法。

或者我不明白你到底是什么意思?

于 2011-10-17T16:42:51.737 回答
0

不久前注意到了这一点 - 如果两个对象在创建它们时生成了 toString() 方法,那么您可以在对象的 toString() 方法上使用 .equals 。这些可以与相对轻松进行比较,因为它们将检查输出 xml 是否等效。

于 2015-03-16T00:05:48.463 回答
0

XmlBeans 不支持深度比较,因此您必须自己编写。不久前开发邮件列表上有一个关于模式感知比较的线程,但我不确定它有什么结果:

http://www.mail-archive.com/dev@xmlbeans.apache.org/msg01960.html

于 2011-10-18T19:19:51.290 回答