2014-12-02 2 views
1

최근 아파치 카멜 조사를 시작한 데 한 가지 문제점이 있습니다. 내 경로에 대한 몇 가지 테스트를 쓰기 시작하고,아파치 카멜 모의 엔드 포인트

<route id="person-add-route"> 
     <from uri="direct:start"/> 
     <to uri="mock:result"/> 
    </route> 

그래서, 내가 모의 가지고 exepcting하고 테스트를 쓴 경로의 일부가 기록 "을"많은 예제가있다 : 마지막 endproint로 결과. 여기

@Test 
@DirtiesContext 
public void testCamel() throws Exception { 
    // Given 
    Object body = "body"; 
    int messageCount = 1; 
    MockEndpoint endpoint = getMockEndpoint("mock:result"); 

    // When 
    template.sendBody("direct:start", body); 

    // Then 
    endpoint.expectedMessageCount(messageCount); 
    endpoint.assertIsSatisfied(); 
} 

는 질문입니다 :이 모의 쓰기하는 것이 중요하다 : 나는 내 길을 테스트하려는 경우 결과?

+0

당신이 묻고있는 것이 확실하지 않은 경우 ... 테스트하기 위해 모든 경로 끝에 모의 종점을 포함해야하는지 묻고 있습니까? – mdnghtblue

+0

물어 보는 중 - 생산 경로에 "모의 : 결과"를 포함시켜야합니까? 그렇다면 실제 코드에서 테스트 기능을 추가해야하는 이유를 이해할 수 없기 때문에 매우 혼란 스럽습니다. 내 실제 코드에서 그 "mock :"지시어를 제외 할 수있는 방법이 있습니까? 해결 방법을 만드는 것이 문제가 아니지만 좀 더 세련된 솔루션을 얻고 싶습니다. 감사합니다. –

+0

잘못 했으므로 메시지를 보내기 전에 기대를 설정해야합니다. 1) 기대치 설정 2) 메시지 전송 3) 어설트 결과는 –

답변

4

프로덕션 환경에 "mock : result"를 포함 할 필요는 없지만 경로를 테스트하는 데는 여러 가지 방법이 있습니다. 경로는 다음과 같은 경우

@Override 
public boolean isMockEndpoints() 
{ 
    return "*"; 
} 

: 그래서

<route id="person-add-route"> 
    <from uri="direct:start"/> 
    <to uri="direct:result"/> 
</route> 

당신은이 같은 MockEndpoint을 확인할 수 있습니다 또한 수

MockEndpoint endpoint = getMockEndpoint("mock:direct:result"); 

하나는 낙타 시험에 isMockEndpoints을 구현하는 것입니다 다음과 같이하여 AdviceWith을 사용하여 테스트 시간에 경로를 수정하십시오.

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() { 
    @Override 
    public void configure() throws Exception 
    { 
     weaveAddLast().to("mock:result"); 
    } 
}); 

또한 Claus가 자신의 의견에서 언급했듯이 경로에 메시지를 보내기 전에 기대치를 설정했는지 확인하십시오.

+0

감사합니다. –

+0

아파치 낙타를 배우기 위해 어떤 자료를 추천 해 주시겠습니까?) –

+0

안녕하세요, 실제로 솔루션을 사용해 보았는데 작동하지 않아 DirectConsumerNotAvailableException을 받고 있습니다 - 엔드 포인트에서 사용할 수있는 소비자가 없습니다. –