キャメル初心者で、MockEndpoints機能の仕組みを理解するためにいくつかのコードを試していますが、機能しません。ここで私がMockEndpointsを使って単体テストしたい私のCamelルートがあります。プロパティ値は、application.propertiesファイルで定義されています。キャメルユニットテストMockEndPointsとスキップ
from("kafka:{{kafka.servers}}?topic={{kafka.consumer.topic}}&groupId={{kafka.consumer.groupId}}")
.to("direct:notify");
from("direct:notify")
.log("direct:notfy");
ここに私のテストコードは、1 Exchangeの受信のアサートに失敗しています。あなたはそれが正規表現であることを期待場合
@RunWith(SpringRunner.class)
@SpringBootTest
@MockEndpointsAndSkip("kafka:{{kafka.servers}}?*|direct:notify")
public class NotificationApplicationTests {
@Autowired
private CamelContext context;
@Value("${kafka.servers}")
private String kafkaServers;
@EndpointInject(uri="mock:kafka:{{kafka.servers}}")
private MockEndpoint mockKafka;
@EndpointInject(uri="mock:direct:notify")
private MockEndpoint mockDirect;
@Autowired
private ProducerTemplate notiProducer;
@Test
public void testMockEndpoints() throws Exception{
mockDirect.setExpectedMessageCount(1);
mockDirect.whenAnyExchangeReceived((Exchange exchange) -> {
//NEVER GETS HERE!!
log.info("MOCK DIRECT exchange received");
});
String payload = "{'email': '[email protected]', 'data': 'ABC1234'}";
notiProducer.sendBody(mockKafka, payload);
mockDirect.assertIsSatisfied();
}
}
ありがとうございます。提案された変更の後に機能しました。 「直接通知する」エンドポイントをモックして私の最初のルート(モックで:直接:通知)から交換を受け取ったとき、2番目のルートはキックオフされません。それは?私はログに "direct:notify"と期待していましたが、2番目のルートは決して蹴られません。 – vikram
..AndSkipを使うので、そのエンドポイントに送信をスキップします。 AndSkipを使わないものも使ってください。 –
私の理解では、MockEndpointAndSkipは "mock:direct:notify"エンドポイントを追加し、元のエンドポイント "direct:notify"への送信をスキップしますが、代わりに "mock:direct:notify"に交換を送信します。 "direct:notify"で始まる私の2番目のルートは "mock:direct:notify"を追加し、私の最初のルートからこの模擬エンドポイントで受信した交換機は、第二のルートで? – vikram