测试骆驼路线

nan*_*oft 5 java junit unit-testing apache-camel

我在 com.comp.myapp.routes 下的项目中定义了多个路由类。为了测试这些,我正在模拟最终路线并检查/比较收到的交付。

例如说我有以下路线:

public class MyRoute1 extends RouteBuilder {
    public void configure() throws Exception {
       //Route_1 code
    }
}

public class MyRoute2 extends RouteBuilder {
    public void configure() throws Exception {
       //Route_2 code
    }
}

....
...//some route impl
..
public class MyRouteN extends RouteBuilder {
    public void configure() throws Exception {
       //Route_N code
    }
}
Run Code Online (Sandbox Code Playgroud)

现在对于所有这些路由,我编写的测试用例似乎相同。先嘲讽一下。

模拟MyRoute1

public class MyRoute1_Mock extends RouteBuilder {
    public void configure() throws Exception {
      from("direct:sampleInput")
                .log("Received Message is ${body} and Headers are ${headers}")
                .to("mock:output");
    }
}
Run Code Online (Sandbox Code Playgroud)

测试 MyRoute1:

public class MyRoute1_Test extends CamelTestSupport {
    @Override
    public RoutesBuilder createRouteBuilder() throws Exception {
        return new MyRoute1_Mock();
    }
    @Test
    public void sampleMockTest() throws InterruptedException {
        String expected="Hello";
        /**
         * Producer Template.
         */
        MockEndpoint mock = getMockEndpoint("mock:output");
        mock.expectedBodiesReceived(expected);
        String input="Hello";
        template.sendBody("direct:sampleInput",input );
        assertMockEndpointsSatisfied();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在要对其他类进行单元测试,只需复制并粘贴上述具有不同名称的代码,例如 MyRoute2_Test、MyRoute3_Test、...MyRouteN_Test。

那么它实际测试了什么?它只是为了编写测试用例而编写的。它实际上只是检查/测试模拟库和骆驼测试库是否有效我们的代码是否有效?实际应该怎么做?

Ste*_*ton 0

您显示的路线实际上对穿过它的消息没有任何作用,因此测试您在一端发送的相同文本是否会在另一端出现,这就是测试的全部内容。

对于具有更多数据转换和处理的路由,您可以测试输出数据类型,在需要时调用处理器,您可以模拟抛出异常等。上面的内容是一个很好的开始。