1

コンポーネント(エンドポイント)が書かれたキャメルプロジェクトがあります。ルート (mycomponent:somename) で使用されます。コンポーネントが終了した後、ルートの単体テストが失敗し始めました。(独自のクライアントが書かれたいくつかの http 通信を使用します) 「サーバーに接続できません...」、「プロパティを読み取れません....」というエラーが表示されます。

したがって、エンドポイントは、この目的で使用したダイレクトに置き換えられていないようです。私が必要としているのは、ルートの実際の単体テストです。いくつかのテストを実行するために Web サービスを開始する必要はありません。ルート テストだけを行う必要があります。

サンプルコード:

public class MyTest extends CamelTestSupport {

@Override
public String isMockEndpoints() {
    return "*";
}

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            includeRoutes(new MyRoute());
        }
    };
}

@Test
public void testRouteToRd() throws Exception {
    context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

        @Override
        public void configure() throws Exception {
            replaceFromWith("direct:incomponent");   // replacing from
        }
    });

    getMockEndpoint("mock:myconnector:outcomponent").expectedMessageCount(1);
    template.sendBody("direct:incomponent", OK_MESSAGE);  // and sending to direct
    assertMockEndpointsSatisfied();
}
}

なぜこの構成で実際のコンポーネントにアクセスし始めたのですか (コンポーネントが完成する前にうまく機能していました) 誰か助けてくれませんか?

申し訳ありませんが、コピーペーストと構成での「再生」が役に立ちました。交換済み

@Override
public String isMockEndpoints() {
    return "*";
}

と:

@Override
public String isMockEndpointsAndSkip() {
    return "*";
}

そして、私のすべてのテストは今では良いです。しかし、なぜこれが起こっているのかまだ理解できません。エンドポイントを直接に置き換え、メッセージを直接に送信します

では、大変申し訳ありませんが、良くない質問でしたら、閉じてください。

4

1 に答える 1

0

Camel テストで使用する場合adviceWithは、メソッドをオーバーライドしてから、データを送信する前にisUseAdviceWith呼び出す必要があります。context.start()

例:

 @Override
public boolean isUseAdviceWith() {
    // tell we are using advice with, which allows us to advice the route
    // before Camel is being started
    return true;
}

@Test
public void testRouteToRd() throws Exception {
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {

    @Override
    public void configure() throws Exception {
        replaceFromWith("direct:incomponent");   // replacing from
    }
});

context.start(); // NECESSARY IF USING ADVICEWITH

getMockEndpoint("mock:myconnector:outcomponent").expectedMessageCount(1);
template.sendBody("direct:incomponent", OK_MESSAGE);  // and sending to direct
assertMockEndpointsSatisfied();

}

参照: Camel AdviceWith documentation

于 2014-11-18T08:51:07.360 に答える