我正在尝试使用FunctionalTestComponent
来捕获 Mule 中的消息,以便我可以在流程中针对某些 Header 属性进行断言。但是从来没有收到过事件,我的测试总是通过它应该失败的地方。如何配置我的测试以捕获事件?这是我的测试方法:
@Test
public void testCallback() throws Exception {
FunctionalTestComponent ftc = getFunctionalTestComponent("test");
ftc.setEventCallback(new EventCallback()
{
public void eventReceived(MuleEventContext context, Object component)
throws Exception
{
assertTrue(false);
System.out.println("Thanks for calling me back");
}
});
MuleClient client = muleContext.getClient();
MuleMessage reply = client.send("vm://test", TEST_MESSAGE, null, 5000);
}
配置只是 2 个流,其中一个 test:component 在第二个流中,由 vm://test 流引用。
我可以让它工作的唯一方法是使用一个闩锁和一个AtomicReference
来保存 MuleMessage,这样我就可以在muleClient.send
.
FunctionalTestComponent ftc = getFunctionalTestComponent("test");
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<MuleMessage> message = new AtomicReference<MuleMessage>();
EventCallback callback = new EventCallback() {
public void eventReceived(MuleEventContext context, Object component)
throws Exception {
if (1 == latch.getCount()) {
message.set(context.getMessage());
System.out.println("1111");
latch.countDown();
}
}
};
ftc.setEventCallback(callback);
MuleClient client = muleContext.getClient();
client.send("vm://test", TEST_MESSAGE, null);
latch.await(10, TimeUnit.SECONDS);
MuleMessage msg = (MuleMessage) message.get();