MockEndpointでキャメルルートをテストする

Why does this test fails with "java.lang.AssertionError: mock://destino Received message count. Expected: <12> but was: <0>" ? I'm just trying to test if Camel can really reorder messages.

輸入:

import java.util.ArrayList;
import java.util.List;

import org.apache.camel.CamelContext;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.guice.CamelModuleWithRouteTypes;
import org.jukito.JukitoModule;
import org.jukito.JukitoRunner;
import org.junit.Test;
import org.junit.runner.RunWith;

import com.google.inject.Inject;

テスト:

@RunWith(JukitoRunner.class) public class ResequenceTest {

    @Inject protected CamelContext context;
    @Produce protected ProducerTemplate template;

    public static class Module extends JukitoModule {
        @SuppressWarnings("unchecked") protected void configureTest() {
            install(new CamelModuleWithRouteTypes(OrderingTestRouteBuilder.class));
        }
    }

    @Test public void testDozenMsgsOrderByIntegerBody() throws Exception {
       //fail();
            Integer[] input = new Integer[] {12, 11, 10, 9, 8, 7, 6, 5, 1, 2, 3, 4};
            List expectedOutput = new ArrayList();
        for (int i=1; i<=12; i++) {expectedOutput.add(i);};
        for (Integer i : input) {template.sendBody("mock:receptor", i);};
        MockEndpoint resultEndpoint = context.getEndpoint("mock:destino", MockEndpoint.class);
        resultEndpoint.expectedBodiesReceived(expectedOutput);
        resultEndpoint.assertIsSatisfied();
    }

}

ルート:

class OrderingTestRouteBuilder extends RouteBuilder {
        @Override public void configure() throws Exception {
        from("direct:start")
            .to("mock:receptor")
            .resequence(body(Integer.class))
            .to("mock:destino");
    }
}

ありがとう、 ロドルフォ

1

2 答え

Camelにメッセージを送信する前に、モック上に期待値を設定する必要があります 。ステップは

  1. モックに期待する設定
  2. メッセージを送信する
  3. アサート
4
追加された
はい、私は今朝それを実現しました。ありがとう、クラウス。
追加された 著者 Rodolfo,

それは今通過している。私はテストを次のように変更した:

@Test public void testDozenMsgsOrderByIntegerBody() throws Exception {
   //fail();
    List input = Arrays.asList(new Integer[] {12, 11, 10, 9, 8, 7, 6, 5, 1, 2, 3, 4});
    List expectedOutput = new ArrayList();
    for (int i=1; i<=12; i++) {expectedOutput.add(i);};
    MockEndpoint resultEndpoint = context.getEndpoint("mock:result", MockEndpoint.class);
    resultEndpoint.expectedBodiesReceived(expectedOutput);
    for (Integer i : input) {template.sendBody("direct:start", i);};
    resultEndpoint.assertIsSatisfied();
}

そして、

class OrderingTestRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
    from("direct:start")
       .resequence(body(Integer.class))
       .to("mock:result");
    }
}
1
追加された