【问题标题】:Mule JUnit Test on Exception Stack异常堆栈上的 Mule JUnit 测试
【发布时间】:2014-07-17 14:59:57
【问题描述】:

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

【问题讨论】:

    标签: java junit mule junit4 mule-studio


    【解决方案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);
    

    记得在client.dispatch()方法之后使用Thread.sleep,否则Mule不会等待流程在调度后立即处理和请求文件。

    【讨论】:

    • 既然分派是“单向”的,如果我需要评估消息负载,我将如何请求它来评估分派文件的结果?
    • 有没有办法使用 client.request 来获取监听器,以便在 Mule 应用程序中抛出异常时进行捕获?
    • 我知道像http这样的同步端点,但不知道file是异步的
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 2011-01-28
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2014-07-18
      相关资源
      最近更新 更多