有没有办法比较Camel Junit中的XML消息?
我使用以下代码:
@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:camel-context-test.xml" })
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@MockEndpoints("*")
public class CamelRoutesTest/* extends XMLTestCase */{
private static final Log LOG = LogFactory.getLog(CamelRoutesTest.class);
@Autowired
protected CamelContext camelContext;
@EndpointInject(uri = "mock:d2")
protected MockEndpoint direct1;
@Produce(uri = "direct:d1")
protected ProducerTemplate d1;
@Test
public void test1() throws Exception {
LOG.info("Starting testTradeSaveToPL test");
//node1 comes BEFORE node2
String sendMsg = "<test><node1>1</node1><node2>2</node2></test>";
//node1 comes AFTER node2
String valMsg1 = "<test><node2>2</node2><node1>1</node1></test>";
direct1.expectedBodiesReceivedInAnyOrder(valMsg1);
d1.sendBody(sendMsg);
direct1.assertIsSatisfied(camelContext);
}
}
我的问题是,在我发送到路由的XML消息中,node1位于node2之前,而reply2位于node1之前。
通过查看,我知道XML都是相同的,但由于代码进行了字符串比较,因此失败了。
我知道XMLJUnit比较工具,但是如何将它集成到给定的测试用例中呢?
答案 0 :(得分:3)
我在我的Camel单元测试中集成了XMLUnit来比较XML消息。
在构造函数中,设置XMLUnit:
@Override
public void setUp() throws Exception {
super.setUp();
//Tell XML Unit to ignore whitespace between elements and within elements
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setNormalizeWhitespace(true);
}
然后你可以运行一个断言:
Diff myDiff = new Diff(actualResponse, expectedResponseAsString);
assertTrue("XML identical " + myDiff.toString(),
myDiff.identical());
您可以使用此依赖关系:
<dependency>
<groupId>xmlunit</groupId>
<artifactId>xmlunit</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
以下是指向用户指南的链接:
http://xmlunit.sourceforge.net/userguide/html/index.html
由于元素序列实际上是不同的,因此该测试框架可能对您没有帮助。但是,您也可以使用Java或JDOM中的XPath API来运行您的断言。
谢谢, Yogesh