0

在使用骆驼进行的单元测试中,我可以使用 xpath 进行断言来检查输出 xml 是否正确。但相反,我想使用 XMLUnit 来针对另一个完整的 xml 文件验证 xml。那可能吗?以下测试成功,但我想对其进行调整以获取实际的 XML。

  @Test
  public void testSupplierSwitch() throws Exception
  { 
    MockEndpoint mock = getMockEndpoint("mock:market-out");
    mock.expectedMessageCount(1);

    EdielBean edielBean = (EdielBean)context.getBean("edielbean");
    edielBean.startSupplierSwitch(createCustomer(), createOrder(), "54", "43");

    assertMockEndpointsSatisfied();
  }
4

1 回答 1

2

这是使用 mockEndpoint.getExchanges() 解决它的一个示例

public class XmlUnitTest extends CamelTestSupport{

    @EndpointInject(uri = "mock:market-out")
    MockEndpoint marketOut;

    @Override
    @Before
    public void setUp() throws Exception {
        super.setUp();
        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:in")
                    .setBody(constant("<xml>data</xml>"))
                    .to(marketOut.getEndpointUri());
            }
        });


    }

    @Test
    public void sameXml() throws Exception {
        marketOut.expectedMessageCount(1);
        template.sendBody("direct:in", "body");
        marketOut.assertIsSatisfied();
        final String actual = marketOut.getExchanges().get(0).getIn().getBody(String.class);
        final Diff diff = XMLUnit.compareXML("<xml>data</xml>", actual);
        assertTrue(diff.similar());
        assertTrue(diff.identical());
    }

    @Test()
    public void notSameXml() throws Exception {
        marketOut.expectedMessageCount(1);
        template.sendBody("direct:in", "body");
        marketOut.assertIsSatisfied();
        final String actual = marketOut.getExchanges().get(0).getIn().getBody(String.class);

        final Diff diff = XMLUnit.compareXML("<xml>invalid</xml>", actual);
        assertFalse(diff.similar());
        assertFalse(diff.identical());
    }
}
于 2015-09-08T13:03:14.893 回答