JUnitテストを記述して実行する
手順
-
[Package Explorer] (パッケージエクスプローラー)でroute-unit-testというMavenプロジェクトを右クリックし、コンテキストメニューで[New] (新規) > [JUnit Test Case] (JUnitテストケース)を選択します。
- [New JUnit Test Case] (新規JUnitテストケース)ウィザードが開きます。[New JUnit 3 test] (新規JUnit 3テスト)を選択し、テストクラスの名前としてRouteTestSampleと入力します。[Finish] (終了)をクリックします。
-
デザインワークスペースにテストクラスが開きます。次のようにテストを記述します。
package org.talend.test; import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.EndpointInject; 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.test.junit4.CamelTestSupport; import org.junit.Test; import esbdemos.simpleroute_0_1.SimpleRoute; public class RouteTestSample extends CamelTestSupport { @EndpointInject(uri = "mock:result") protected MockEndpoint resultEndpoint; @Produce(uri = "direct:start") protected ProducerTemplate template; private RouteBuilder builder; @Test public void testSendMatchingMessage() throws Exception { String expectedBody = "bar"; resultEndpoint.expectedBodiesReceived(expectedBody); template.sendBody(expectedBody); resultEndpoint.assertIsSatisfied(); } @Test public void testSendNotMatchingMessage() throws Exception { resultEndpoint.expectedMessageCount(0); template.sendBody("foo"); resultEndpoint.assertIsSatisfied(); } @Override protected CamelContext createCamelContext() throws Exception { SimpleRoute route = new SimpleRoute(); // Setup the test aliases Map<String, String> uriProperties = route.getUriMap(); uriProperties.put("start", "direct:start"); uriProperties.put("end", "mock:result"); route.loadCustomUriMap(uriProperties); // Build the route builder = route.Route(false); return builder.getContext(); } @Override protected RouteBuilder createRouteBuilder() { return builder; } }
上記のように、ルートをテストするためにCamelテストフレームワークを使用します。ここでは、特別なmockエンドポイントを使って、単体テスト中に結果を抽出する必要があります。けれども、作成したルートではそのようなmockエンドポイントを使用していません。通常のfileコンポーネントとlogコンポーネントが使用されます。この解決策として、fileコンポーネントとlogコンポーネントをdirect:startコンポーネントとmock:resultコンポーネントに置き換えます。49行から52行にMap<String,String>がありますが、これが、コンポーネント名をそのURIにマッピングし、startとendの値を置き換えます。こうすることでコンポーネントのモックを作成して、分離した状態でルートをテストできます。
-
ツールバーの
ボタンをクリックし、テストを実行します。
テストは正しく実行されました。