JUnitテストを記述して実行する - 7.0

データサービスとルーティングのサンプル

EnrichVersion
7.0
EnrichProdName
Talend Data Fabric
Talend Data Services Platform
Talend ESB
Talend MDM Platform
Talend Open Studio for ESB
Talend Real-Time Big Data Platform
EnrichPlatform
Talend Studio
task
ジョブデザインと開発 > サービスデザイン
ジョブデザインと開発 > ルートデザイン

手順

  1. [Package Explorer] (パッケージエクスプローラー)でMavenプロジェクトのroute-unit-testを右クリックし、コンテキストメニューで[New] (新規) > [JUnit Test Case] (JUnitテストケース)の順に選択します。
  2. [New JUnit Test Case] (新規JUnitテストケース)ウィザードが開きます。[New JUnit 3 test] (新規JUnit 3テスト)を選択し、テストクラスの名前としてRouteTestSampleと入力します。[Finish] (終了)をクリックします。
  3. デザインワークスペースにテストクラスが開きます。次のようにテストを記述します。
    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にマッピングし、startendの値を置き換えます。こうすることでコンポーネントのモックを作成して、分離した状態でルートをテストできます。

  4. ツールバーのボタンをクリックして、テストを実行します。

    テストは正常に実行されました。