关于java:异常堆栈上的Mule JUnit测试

Mule JUnit Test on Exception Stack

我正在尝试在我创建的Mule Flow上创建一个JUnit测试,我们测试是否在未提供文件时抛出自定义异常。

目前,我通过使用Java将文件放入监听目录来手动触发Mule服务,以触发启动Flow的文件端点。 然后我评估输出文件以查看流是否正常工作。 有没有办法做同样的事情,但JUnit测试组件可以监听Mule服务并捕获异常堆栈有效负载并断言实际和预期的错误消息?

更多地了解我正在尝试做的事情:

1
2
3
4
5
6
7
8
9
10
11
12
13
@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?


您应该使用MuleClient将文件发送到您的端点,而不是手动删除文件

1
muleClient.dispatch("file://D:/test_docs/in", inputFileName, null);

编辑:

一旦你调度了文件,如果你的流程在正常过程中写入file:outbound-endpoint或者在错误的情况下,你可以像这样请求文件:

1
MuleMessage result = client.request("file://D:/test_docs/out/error", 5000);

请记住在client.dispatch()方法之后使用Thread.sleep否则Mule将不会等待流程处理并在发送后立即请求文件。


使用MUnit,您可以从JUnit,Mule配置文件,断言,模拟消息处理器等中使用它。