6 단위 테스트는, 나는 당신의 검사 결과가 '때로 믿을 수 있도록 경로가 Endpoint
인스턴스를 수용 할 수 있도록 훨씬 더이라고 생각 프로덕션 엔드 포인트 URI에 연결됩니다.
public class MyRoute extends RouteBuilder {
private Endpoint in;
private Endpoint out;
// This is the constructor your production code can call
public MyRoute(CamelContext context) {
this.in = context.getEndpoint("http://someapi/someresource");
this.out = context.getEndpoint("activemq:somequeue");
}
// This is the constructor your test can call, although it would be fine
// to use in production too
public MyRoute(Endpoint in, Endpoint out) {
this.in = in;
this.out = out;
}
@Override
public void configure() throws Exception {
from(this.in)
.process(exchange -> {
// Do stuff with exchange
})
.to(this.out);
}
}
다음과 같이 테스트 할 수있다 : 예를 들어
, 당신은 당신이 그것을 가능하게 할 수
public class MyRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("http://someapi/someresource")
.process(exchange -> {
// Do stuff with exchange
})
.to("activemq:somequeue");
}
}
같은 것이과 같이 엔드 포인트를 주입 보이는 RouteBuilder
이 있다고
public class MyRouteTest {
private Endpoint in;
private MockEndpoint out;
private ProducerTemplate producer;
@Before
public void setup() {
CamelContext context = new DefaultCamelContext();
this.in = context.getEndpoint("direct:in");
this.out = context.getEndpoint("mock:direct:out", MockEndpoint.class);
this.producer = context.createProducerTemplate();
this.producer.setDefaultEndpoint(this.in);
RouteBuilder myRoute = new MyRoute(this.in, this.out);
context.addRoutes(myRoute);
context.start();
}
@Test
public void test() throws Exception {
this.producer.sendBody("Hello, world!");
this.out.expectedMessageCount(1);
this.out.assertIsSatisfied();
}
}
다음과 같은 이점이 있습니다.
- 테스트는 매우 간단하고 이해하기 쉬운, 심지어
CamelTestSupport
또는 다른 헬퍼 클래스
CamelContext
은 그래서 당신은 시험에만 경로가 있는지 확인 할 수 있습니다 손으로 만든
- 을 확장 할 필요가 없습니다
- 만든 테스트는 생산 경로의 URI에 대해 상관하지 않는다
- 당신은 여전히이의 편의를 원하는 경우 경로 클래스로 엔드 포인트 URI를 하드 코딩