如何在不更改生产代码的情况下测试骆驼路线?

Jen*_* P. 4 unit-testing apache-camel

我有一个简单的骆驼路线:

@Component
public class HelloRoute extends RouteBuilder {

    String startEndpoint;

    @Override
    public void configure() {
        from(startEndpoint).process(new HelloProcessor());
    }
}
Run Code Online (Sandbox Code Playgroud)

为了进行测试,我读到的所有内容都说要添加一个模拟端点来存储结果:

from(startEndpoint).process(new HelloProcessor()).to("mock:result");
Run Code Online (Sandbox Code Playgroud)

这意味着我必须更改我的代码以包含模拟,并且它将在生产中运行。骆驼文档非常清楚不要在生产中使用模拟: https: //camel.apache.org/mock.html

如何编写一个使用模拟来评估结果的单元测试,但同时路由器类应该在生产中运行,而不需要任何测试代码或其他人为和不必要的端点,例如

to("log:blah")
Run Code Online (Sandbox Code Playgroud)

小智 5

这是您可以在测试用例中执行的操作

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

这会将“mock:result”添加到路线的末尾。这样您就可以修改测试路由而无需重写它们。