我有以下RouteBuilder
类,我在这里使用依赖注入。如何测试此路径构建器?我正在使用JUnit和骆驼测试类。
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
吗?测试这个的正确方法是什么?
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());
}
}
答案 0 :(得分:2)
当您使用@Mock
时,必须调用MockitoAnnotations.initMocks
。此外,在将引用传递给when
:
TestRoute
@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);
在when
中调用createRouteBuilder
时,serviceConfiguration.getName()
始终为JUnit测试类中的所有测试方法返回相同的结果。如果不同的测试方法需要不同的URI,这可能是个问题。
或者,您可以使用adviceWith
来代替here。
答案 1 :(得分:1)
Camel有两种方法可以进行路由测试, CamelSpringTestSupport 和 CamelTestSupport 。
<强> CamelSpringTestSupport 强>
您可以使用一些camel-whatever-test.xml设置路由,以在Spring配置xml中设置路由。
<强> CamelTestSupport 强>
您可以使用RouteBuilder createRoute设置路线。并使用模拟组件配置端点。
这里有一些参考链接,别忘了添加依赖jar: http://camel.apache.org/testing.html
答案 2 :(得分:0)
在您的情况下使用mockito是有意义的,因为您只需要ServiceConfiguration的一些小部分。
另一方面,您需要它来设置配置数据是一个不好的迹象。您应该检查您的配置是否可以拆分为单独的部分,或者根本不在RouteBuilder中使用。如果您有一个在代码的所有部分中使用的配置结构,则会在应该分开的事物之间建立紧密耦合。如果您只需要路由器中的两个属性队列uri和http uri,那么请考虑为它们设置两个setter。