【发布时间】:2017-08-09 17:25:00
【问题描述】:
我尝试为我编写的 Docx4J 生成器编写一些 JUnit 测试。 我想将生成器的输出节点与我想从字符串加载的预期节点进行比较。
所以,我像这样创建我的“实际”节点(生成器输出):
Node xmlNodeActual = XmlUtils.marshaltoW3CDomDocument(actual).getDocumentElement();
“实际”是我的生成器创建的对象。
对于我的“预期”节点,我编写了以下代码:
Document doc = docBuilder.parse(new InputSource(new ByteArrayInputStream(strXmlNode.getBytes("utf-8")))):
Node xmlNodeExpected = doc.getDocumentElement();
strXmlNode 是一个包含预期 xml 的字符串。 尽管从视觉差异中我可以看出我的两个节点是相等的,但调用以下结果会产生“假”:
xmlNodeActual.isEqualNode(xmlNodeExpected)
我怀疑原因是两个节点的运行时类型不同:
- xmlNodeActual: org.apache.xerces.dom.DeferredElementImpl
- xmlNodeExpected: org.apache.xerces.dom.ElementNSImpl
我喜欢我的测试设计,因为它可以让我为大型生成器快速编写大量测试用例。但是,我看不到将这种方法与“isEqualNode”结合使用的方法。 我是否必须编写自己的比较器,或者是否有我不知道的方法来确保节点的类型相同?
【问题讨论】:
标签: java xml jaxb docx4j javax