8

私はキャメルから始めていますが、テストを書くのに問題があります。私の使用例は、 cfx プロキシの例とまったく同じです。ただし、「RealWebservice」は必要ありません。ここで、アノテーション アプローチを使用して、単体テスト (例に含まれている統合テストではありません) を作成しようとしています。

@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:application-context.xml" })
@MockEndpointsAndSkip
public class RoutesTest {

@Autowired
CamelContext camelContext;

@EndpointInject(uri = "mock:cxf:bean:cxfEndpoint", context = "camelContext")
MockEndpoint cxfEndpoint;

@EndpointInject(uri = "mock:log:input", context = "camelContext")
MockEndpoint logInputEndpoint;

@EndpointInject(uri = "mock:http:realhostname:8211/service", context = "camelContext")
MockEndpoint realEndpoint;

@EndpointInject(uri = "mock:cxf:bean:cxfEndpoint")
ProducerTemplate producer;

@Test
public void testLeleuxMifidRoute() throws InterruptedException {
    String body = "<blah/>";

    cxfEndpoint.expectedBodiesReceived(body);
    logInputEndpoint.expectedBodiesReceived(body);
    realEndpoint.expectedBodiesReceived(body);

    producer.sendBody(body);

    MockEndpoint.assertIsSatisfied(camelContext);
}
}

cxfEndpoint はメッセージを受信しますが、他のエンドポイントは受信しません。

ルートは次のようになります (実行して SoapUI でメッセージを送信すると機能します。明らかに、この例では ips と beannames を難読化しています)。

<endpoint id="callRealWebService" uri="http://realhostname:8211/service?throwExceptionOnFailure=true" /> 
<route>
  <from uri="cxf:bean:cxfEndpoint?dataFormat=MESSAGE"/>
  <to uri="log:input?showStreams=true"/>
  <to ref="callRealWebService"/>
  <to uri="log:output"/>
</route>

私は何を間違っていますか?私が見つけたすべての例とその他の質問は、「direct:start」を使用しているか、生産ルートを変更しているようです。

4

1 に答える 1

4

私たちが成功裏に使用したアプローチの 1 つは、テスト実行用とメイン コード用に異なるプロパティ ファイルを用意することです。

camel-context 内でプロパティを定義します

<propertyPlaceholder id="properties"
            location="classpath:META-INF/uri.properties" xmlns="http://camel.apache.org/schema/spring" />

フォルダー/src/main/resources/META-INF/には、メイン コード用の uri.properties ファイルと/src/test/resources/META-INF/、テスト実行用の uri.properties ファイルがあります。

表記法を使用して、実際の uri 値の代わりにプロパティ プレースホルダーを使用して、ルートを書き換える必要があります。{{properties.name}}

<route>
  <from uri="{{cxf.bean.cxfEndpoint}}"/>
</route>

メインの uri.properties は次のようになります

cxf.bean.cxfEndpoint=cxf:bean:cxfEndpoint?dataFormat=MESSAGE

テスト uri.properties は次のようになります

cxf.bean.cxfEndpoint=direct:start

この構成を使用すると、ルートを簡単にテストできます。

于 2013-09-16T22:55:31.357 に答える