Apache Camel 2.15.3を使用してアプリケーションをビルドしました。そして私はdependency injectionのためにspring-xmlを使ってルートを配線しています。私は自分のルートの自動テストを書く方法を理解するのに苦労しています。たとえば、私はルートを持っているかもしれません:Apacheのラクダルートのテスト
<onException id="Exception">
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
<to uri="direct:fear"/>
</onException>
<route id="happyStory">
<from uri="direct:inTheBeginning"/>
<to uri="bean:enchantedKingdom?method=warn" />
<to uri="bean:fluffykins" />
</route>
<route id="scaryStory">
<from uri="direct:fear"/>
<onException>
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
</onException>
<to uri="bean:monster"/>
<choice>
<when>
<simple>${header.succesfullywarned}</simple>
<to uri="bean:enchantedKingdom?method=hide"/>
</when>
<otherwise>
<to uri="bean:enchantedKingdom?method=panic" />
</otherwise>
</choice>
</route>
を私は時に豆その後、Beanメソッドが警告したときに、ヘッダがメッセージに設定されるべきである「succesfullywarned」と呼ばれていると言うことができるようにwan'tとfluffykinsが呼び出されると、メッセージが "scaryStory"に送られる例外が発生するはずです。この場合、Beanメソッドhideが呼び出されることをアサートすることはできません。
これは大体私のテストクラスのセットアップです:
@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration({"/META-INF/spring/route-
stories.xml","/META-INF/spring/beans.xml"})
@MockEndpointsAndSkip("(bean:fluffykins|bean:monster|bean:enchantedKingdom?method=warn|bean:enchantedKingdom?method=hide|bean:enchantedKingdom?method=panic)")
public class StoryHappyRouteTest extends CamelSpringTestSupport {
private String url = "direct:inTheBeginning";
@Autowired
private ApplicationContext applicationContext;
@Override
protected AbstractApplicationContext createApplicationContext() {
return (AbstractApplicationContext)applicationContext;
}
@Test
public void test(){
MockEndpoint warn = getMockEndpoint("mock:bean:enchantedKingdom?method=warn");
MockEndpoint fluffy = getMockEndpoint("mock:bean:fluffykins");
MockEndpoint monster = getMockEndpoint("mock:bean:monster");
MockEndpoint hide = getMockEndpoint("mock:bean:enchantedKingdom?method=hide");
MockEndpoint panic = getMockEndpoint("mock:bean:enchantedKingdom?method=panic");
fluffy.whenAnyExchangeReceived(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("Bunny!");
throw new NullPointerException();
}
});
template.sendBody(url,"");
warn.assertExchangeReceived(0);
fluffy.assertExchangeReceived(0);
monster.assertExchangeReceived(0);
panic.assertExchangeReceived(0);
}
}
私はアクションでラクダの初版でのテストの章を読んで、マニュアル(http://camel.apache.org/testing.html)で周りを見てきましたが、私は自分の状況でそれを適用する方法を理解していない。上記のテストでは、複数のメソッドを持つBeanがある場所以外はすべて動作しますので、 "?method = methodname"というURIがあり、何らかの理由でこれが動作しなくなります。エラーは出ませんが、モックは使用されず、代わりに実際のBeanが呼び出されます。 私がやりたいことをすることはできませんか?どのような方法でもテスト設定を変更できますが、ルートとBeanがspring-xmlファイルで定義されていることが前提です。
私は、エンドポイントではなく、自分自身を嘲笑することについて教えてきましたが、私が考えることができる唯一の方法は、すべてのBeanが定義されている「imposter-beans.xml」ファイルを作成することです。ルートで使用されるすべてのクラスを拡張します。しかし、それは精巧で間違ったアプローチのように感じます。
はい、これは私が望んでいないと思います。私がそれを試してみると、私はそれを働かせることができませんでした。今私はもう一度やり直してもう少しだが、エンドポイントとして複数のメソッドを持つBeanで動作させることはできない。この設定を表示するために投稿を編集しました。それは不可能か何かを逃していますか? – numfar