用于入站文件轮询的Mule测试代码

时间:2013-01-29 00:36:45

标签: testing mule

我是Mule ESB的新手。

我有以下Mule的配置文件,它来自拼写检查器教程:

<file:connector name="FILE" streaming="false" doc:name="File" autoDelete="true" validateConnections="false"/>
<flow name="SpellCheckerFlow1" doc:name="SpellCheckerFlow1">        
    <file:inbound-endpoint connector-ref="FILE" path=".\xmlIn" pollingFrequency="3000" responseTimeout="10000" doc:name="Incoming File" moveToDirectory=".\xmlProcessed"/>
    <http:outbound-endpoint exchange-pattern="request-response" host="www.google.com/tbproxy/spell?lang=en" port="80" doc:name="Invoke API"/>
    <echo-component doc:name="Echo"/>
    <file:outbound-endpoint path=".\xmlOut" outputPattern="#[function:datestamp:dd-MM-yy]_#[function:systime].xml" responseTimeout="10000" doc:name="File"/>
</flow>

我正在尝试扩展FunctionalTestCase类并测试此流程。以下是我用来执行此操作的解压缩代码:

MuleClient client = new MuleClient(muleContext);        
client.dispatch("file://./xmlIn", "<valid_xml />", null);
MuleMessage message = client.request("file://./xmlOut", 1000000000);

当我执行此代码时,它会在/ xmlIn文件夹中创建一个数据文件。流程的其余部分不会被执行。流应该在此文件夹上轮询以获取文件。

提前致谢!

1 个答案:

答案 0 :(得分:2)

file端点请求时,超时参数无效:Mule不会等待文件出现。

这意味着您的测试不会阻止并始终失败。解决问题的最简单/最简化的方法是循环{ Thread.wait(); client.request(); },直到获得非空message,即直到xmlOut中的文件被读取为止。

无需添加重试计数器:Mule的FunctionalTestCase将在getTestTimeoutSecs()过去后自动失败(默认为60秒)。

附注:

  • 要使您的配置在我的环境中运行,我必须在XML配置的文件路径中将.\替换为./

  • 出站HTTP端点配置错误:path混合了host,请改用:

    <http:outbound-endpoint exchange-pattern="request-response"
        host="www.google.com" path="tbproxy/spell?lang=en" port="80"
        doc:name="Invoke API" />
    
  • 以这种方式获取Mule客户端效率稍高:

    MuleClient muleClient = muleContext.getClient();