我正在尝试在我创建的Mule Flow上创建一个JUnit测试,我们测试是否在未提供文件时抛出自定义异常。
目前,我手动触发Mule服务,方法是使用Java将文件拖放到监听目录中,以触发启动Flow的文件端点。然后我评估输出文件以查看流是否正常工作。有没有办法做同样的事情,但JUnit测试组件可以监听Mule服务并捕获异常堆栈有效负载并断言实际和预期的错误消息?
更多地了解我正在尝试做的事情:
@Test
public void testValidExceptionThrown () throws Exception {
MuleClient client = muleContext.getClient();
dropInputFileIntoPlace("control_000001.dat","input/control_000001.dat");
MuleEventContext eventContext = getTestEventContext(client);
MuleMessage message = eventContext.getMessage();
String strActualExceptionMessage = message.getExceptionPayload().getMessage();
String strExpectedMessage = "Custom Exception";
assertEquals("the exception message thrown matches the expected exception message", strExpectedMessage, strActualExceptionMessage);
}
当我用Java手动触发Mule流时,有没有办法捕获eventContext?
答案 0 :(得分:1)
使用MUnit,您可以在JUnit,Mule配置文件,断言,模拟消息处理器等中使用它。
答案 1 :(得分:1)
您应该使用MuleClient
将文件发送到您的终端,而不是手动删除文件
muleClient.dispatch("file://D:/test_docs/in", inputFileName, null);
修改强>
一旦你调度了文件,如果你的流程在正常过程中写入file:outbound-endpoint
或者在错误的情况下,你可以像这样请求文件:
MuleMessage result = client.request("file://D:/test_docs/out/error", 5000);
请记住在Thread.sleep
方法之后使用 client.dispatch()
,否则Mule将不会在发送后立即等待流程处理并请求文件。