Mule - 单独的测试配置文件或vm端点进行功能测试?

时间:2014-05-06 15:28:31

标签: java junit mule functional-testing mule-studio

我已经建立了一段时间的Mule应用程序,并且刚刚开始尝试为我的流程编写JUnit测试。我构建的流程通常处理平面文件转换,其结构类似于以下内容:

<flow>
   <inbound endpoint>

   ... DO SOMETHING WITH THE FILE ...

   <outbound endpoint>
</flow> 

我的入站/出站端点是我部署到的环境中的特定位置,并且每个流都不同。我的问题是编写测试以将文件注入流程然后检查输出的最佳实践/方法是什么?使用dummy,vm端点创建配置文件的测试副本并将文件注入其中是正常的吗?或者更合适的是使用下面的复合源并将文件注入常规流程?对于潜在的新手问题深表抱歉,这是我第一次使用自动化测试。

<flow>
   <composite source>
      <inbound endpoint>
      <vm endpoint>
   <composite source>

   ... DO SOMETHING WITH THE FILE ...

   <choice>
      <when "file originates from inbound endpoint...">
         <outbound endpoint>
      </when>
      <otherwise>
         <vm endpoint>
      </otherwise>
   </choice>
</flow>

2 个答案:

答案 0 :(得分:1)

Mule有自己的测试框架,基本上不是将您的类标记为@Test(Junit4),而只是扩展FunctionalTestCase(间接扩展JUnit框架)http://www.mulesoft.org/docs/site/current/apidocs/org/mule/tck/FunctionalTestCase.html

首先,我首先建议您阅读此页面:http://www.mulesoft.org/documentation/display/current/Functional+Testing

假设您的入站端点是http,那么您将使用类似下面的内容,请注意muleClient可以从父类中获得。

    muleClient = muleContext.getClient();

    Map<String, Object> props = new HashMap<String, Object>();
    props.put("http.method", "GET");

    MuleMessage result = muleClient.send(webaddress, "", props);

    assertNotNull(result);
    assertNotNull(result.getPayloadAsString());
    assertFalse(result.getPayload() instanceof NullPayload);

根据需要提出更多断言。

答案 1 :(得分:1)

在相同的情况下,我为每个环境使用属性配置文件。在该环境自定义文件上,我定义了每个入站/出站元素的地址(包括协议)。对于本地环境,我使用文件和目录,对于所有其他环境,我使用真实协议。这允许您在本地测试,而不依赖于任何服务的可用性。