23

別の RouteBuilder クラスでルートを作成したとしましょう。次のようになります。

  • JMS キューからメッセージを取得する
  • いくつかの変換、検証などを行います
  • 検証結果に応じて、特定の JMS キューに転送され、DB に何かが保存されます

JMS ブローカーと DB を使用せずに、このルートを単体テストしたいと思います。Processor の実装をモックできることはわかっていますが、それだけでは十分ではありません。このルートを変更したくありません (jar ファイルでそのクラスを取得したとしましょう)。Camel in Action (セクション 6.2.6) から知る限り、エンドポイントのモックやその他のものを使用できるようにするには、ルート エンドポイントの定義を変更する必要があります (本の例では、これは "mina:tcp:/ /miranda」から「mock:miranda」など)。

ルート定義を変更せずにフローを完全に分離してテストすることは可能ですか? RouteBuilder を別のクラスとして取得した場合、何らかの方法でルート定義を「コピー」して手動で変更する必要がありますか? 間違ったことをテストしていませんか?

私は Camel にまったく慣れていないので、ルートの開発中に単体テストを分離できるのは本当にクールだと思います。何かを変更したり、小さなテストを実行したり、結果を観察したりできるようにするためだけに。

4

4 に答える 4

25

RouteBuilderクラスにエンドポイントがハードコーディングされていると仮定すると、テストが少し難しくなります。ただし、RouteBuilderがエンドポイントURIにプロパティプレースホルダーを使用している場合は、多くの場合、単体テストに別のエンドポイントURIのセットを使用できます。キャメルの本の第6章で説明されているように。

それらがハードコーディングされている場合は、次のように単体テストの機能を備えたアドバイスを使用できます:https ://camel.apache.org/components/latest/others/test-cdi.html#CDITesting-RoutesadvisingwithadviceWith

Camel 2.7では、ルートの操作がはるかに簡単になり、パーツの取り外しや交換などができるようになりました。これが、リンクで話題になっている織り方です。

たとえば、データベースエンドポイントへのメッセージの送信をシミュレートするには、上記のメッセージを使用して、代わりにモックに送信する別のtoに置き換えることができます。

以前のリリースでは、interceptSendToEndpointトリックを使用できます。これは、Camelブック(セクション6.3.3)でも説明されています。

169ページに示すように、コンポーネントをモックコンポーネントに置き換えることもできます。Camel2.8以降では、モックコンポーネントは認識できないURIパラメータについて文句を言うことはなくなりました。つまり、コンポーネントごとのレベルで、コンポーネントをモックに置き換えるのがはるかに簡単です。

于 2011-04-14T15:10:36.713 に答える
6

私は持っている

   <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
        <property name="location" value="classpath:shop.properties"/>
    </bean>

    <route>
        <from uri="direct://stock"/>
        <to uri="{{stock.out}}"/>
    </route>

私のSpringファイルとテストクラスパスのshop.propertiesには、実行時に置き換えられるstock.out = xxxxがあるため、実行時とテスト用に異なるルートにすることができます

複数の環境での 6.1.6 単体テストに、より良い例があります。

于 2011-04-14T15:15:45.683 に答える