Mule JUnit测试异常堆栈

时间:2014-05-28 11:44:04

标签: java junit mule junit4 mule-studio

我正在尝试在我创建的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?

2 个答案:

答案 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将不会在发送后立即等待流程处理并请求文件。