DI には Spring を使用し、ルーティング/メッセージングには Camel を使用しています。さまざまなコンポーネント (パイプライン方式でメッセージを相互にルーティングするコンポーネント) の (JUnit) ユニット テストをセットアップするように依頼されました。
一般的なCamel のテストドキュメントとCamel-Spring のテストドキュメントをざっと見てみると、キャメル エンドポイントを単体テストする好ましい方法は、Spring Test Context Frameworkを使用して、 および sort のようなオブジェクトのサブクラスを使用することAbstractJUnit38SpringContextTests
です。
これらの API の使用経験はまったくありません。したがって、それらは興味深い読み物になりますが、それらを文脈に入れるのは難しいです (しゃれは意図されていません)。
そのため、私が苦労しているいくつかの初期概念があります。
MockEndpoint
1 つには、 、 vs DataSet
、 vsを使用するのが適切なのはいつTest
ですか?
また、Camel-Spring doc (リンクは上にあります) には、次の例が示されています。
@ContextConfiguration
public class MyCamelTest extends AbstractJUnit38SpringContextTests {
@Autowired
protected CamelContext camelContext;
@EndpointInject(uri = "mock:foo")
protected MockEndpoint foo;
public void testMocksAreValid() throws Exception {
// lets add more expectations...
MockEndpoint.assertIsSatisfied(camelContext);
// now lets do some further assertions
List<Exchange> list = foo.getReceivedExchanges();
for (Exchange exchange : list) {
Message in = exchange.getIn();
...
}
}
}
私がこの API を理解し始めMockEndpoint
たとしても、上記のコードは名前付きからすべてのメッセージを読み取っているようにmock:foo
見えますが、それらのメッセージがどこから来ているのか (どのようにしてエンドポイントに到達するのか) はわかりません。最初の場所)!
私の 2 番目の質問は、「スタブ」(モック) するエンドポイントを決定するための標準的な方法は何ですか? たとえば、同じ JMS メッセージ キューが、2 つの異なる JAR/WAR 内に存在する 2 つのエンドポイント (1 つはプロデューサー、もう 1 つはコンシューマー) で使用されている場合はどうなるでしょうか? この場合、ProducerComponent
(内にあるproducer.war
) はメッセージを にプッシュする Camel エンドポイントですsomeQueue
。そしてConsumerComponent
( の中に住んでいるconsumer.war
) は、 からメッセージを消費する別の Camel エンドポイントですsomeQueue
。
SO は、両方のコンポーネントの単体テストをどのように編成しますか?
正しい方向への微調整をよろしくお願いします!