我有以下 RouteBuilder
类,我在这里使用依赖注入(inject)。我如何测试这个路由生成器?我正在使用 JUnit 和 camel 测试类。
public class TestRoute extends RouteBuilder {
private ServiceConfiguration serviceConfiguration;
public TestRoute(ServiceConfiguration serviceConfiguration) {
this.serviceConfiguration = serviceConfiguration;
}
@Override
public void configure() throws Exception {
String incomingURI = serviceConfiguration.getQueueConfiguration().getURI();
String outgoingURI = serviceConfiguration.getHTTPConfiguration().getURI();
from(incomingURI).
setHeader(Exchange.HTTP_METHOD, constant("PUT")).setHeader(Exchange.CONTENT_TYPE, constant("application/json")).
to(outgoingURI);
}
}
我的想法:
创建一个 testConfiguration
扩展 ServiceConfiguration
并传递它。但为此我需要设置所有配置,因为 serviceConfiguration
包含许多其他类。我可以在这里使用 Mockito
吗?测试这个的正确且简单的方法是什么?
编辑:我使用的是现有路线,因此我不必重新编写。看起来这不是 Camel 测试的正确方法。看我的测试课。当然,它不起作用。
public class RabbitMQRouteTest extends CamelTestSupport {
@Mock
ServiceConfiguration serviceConfiguration;
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
System.out.println("testing");
return new TestRoute(serviceConfiguration);
}
@Test
public void testConfigure() throws Exception {
System.out.println("test");
when(serviceConfiguration.getName()).thenReturn("file://target/inbox");
template.sendBodyAndHeader("file://target/inbox", "Hello World",Exchange.FILE_NAME, "hello.txt");
Thread.sleep(1000);
File target = new File("target/outbox/hello.txt");
assertTrue("File not moved", target.exists());
}
}
最佳答案
当您使用@Mock
时,必须调用MockitoAnnotations.initMocks
。此外,在将引用传递给 TestRoute
之前,还调用了 when
:
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
// Initialize serviceConfiguration
MockitoAnnotations.initMocks(this);
when(serviceConfiguration.getName()).thenReturn("file://target/inbox");
return new TestRoute(serviceConfiguration);
}
替代 @Mock
和 MockitoAnnotations.initMocks
,只需使用:
serviceConfiguration = org.mockito.Mockito.mock(ServiceConfiguration.class);
当在 createRouteBuilder
中调用 时,
serviceConfiguration.getName()
始终为 JUnit 测试类中的所有测试方法返回相同的结果.如果不同的测试方法需要不同的 URI,这可能是个问题。
或者,您可以使用 adviceWith
代替描述 here .
关于unit-testing - 如何在 Camel 中对这个路由构建器进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23434232/