2012-11-21 3 views
1

Camel Junit?에서 XML 메시지를 비교하는 방법이 있습니까? ,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); 
    } 
} 

내 문제는 응답 노드 2에서 노드 1 앞에 오는 동안이 경로에 보내는 XML 메시지에, 노드 1은 노드 2 앞에 오는 :

나는 다음과 같은 코드를 사용하고 있습니다.

나는 두 XML이 동일하다는 것을 알고 있지만 코드는 문자열 비교를하기 때문에 실패합니다.

XMLJUnit은 도구를 비교하고 있지만 해당 테스트 케이스에 어떻게 통합 할 수 있습니까?

답변

2

XML 메시지를 비교하기 위해 Camel unit 테스트에 XMLUnit을 통합했습니다. 다음은

<dependency> 
     <groupId>xmlunit</groupId> 
     <artifactId>xmlunit</artifactId> 
     <version>1.3</version> 
     <scope>test</scope> 
    </dependency> 

:이 의존성을 사용할 수 있습니다

Diff myDiff = new Diff(actualResponse, expectedResponseAsString); 
    assertTrue("XML identical " + myDiff.toString(), 
        myDiff.identical()); 

: 당신이 주장을 실행할 수 있습니다 나중에 그런

@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); 
} 

: 당신의 생성자에서

은 위해 XMLUnit을 설정 사용자 가이드 링크 :

http://xmlunit.sourceforge.net/userguide/html/index.html

요소의 순서가 실제로 다르므로이 테스트 프레임 워크가 도움이되지 않을 수 있습니다. 그러나 Java 또는 JDOM의 XPath API만으로도 어설 션을 실행할 수 있습니다.

감사합니다. Yogesh