为MUnit Mule Test设置HTTP Url参数

时间:2016-09-23 01:24:36

标签: mule munit

我有一个我想测试的流程。该流具有HTTP入站连接器,并且流本身充当RESTful服务。

流程需要设置一些URL参数,并使用标准表示法访问这些参数:#[message.inboundProperties.'http.query.params'.test]

我想使用MUnit测试此流程。当我针对流创建默认的MUnit测试时,MUnit会创建一个flow-ref来调用我的原始流。但是,立即运行此测试失败,因为HTTP期望流调用此流,并且期望设置URL参数。

这就是我现在所处的位置。我希望在调用flow-ref之前设置这些变量,以便我的流程可以正常处理。

我尝试了一些事情:

  • 使用munit:set组件,允许设置各种属性
  • 手动实例化MessagePropertyMapContext并将其分配给http.query.params变量
  • flow-ref组件替换HTTP组件并使用实际的HTTP消息调用该流

这些似乎都不能正常工作。

变量设置似乎总是失败,并在尝试访问变量时导致NullPointerException

使用HTTP组件调用流程并不起作用,因为Mule会随机分配一个端口进行测试,而我似乎无法在运行时访问此端口。因此我无法调用端点。

我在其他地方寻找类似的问题herehere,但它们似乎对我没有帮助。

所以我的基本问题是:在从MUnit测试中进行测试时,如何设置流可以访问的URL参数。是否有更好的方法来实现我想在这里实现的目标?

谢谢!

3 个答案:

答案 0 :(得分:3)

@TroyS您可以尝试以下代码。它对我有用。

<munit:set payload="#['']" doc:name="Set Message url_key:payload_1">
        <munit:inbound-properties>
            <munit:inbound-property key="http.query.params" value="#[['url_key':'payload_1']]"/>
        </munit:inbound-properties>
    </munit:set>

答案 1 :(得分:0)

事实证明,如果你看起来足够努力,Mule文档会有答案;) 答案是正确的here

您只需要在MUnit测试流程的开头添加munit:set组件(在Mule Palette中为此组件搜索“Set Message”):

<munit:set payload="#['']" doc:name="Set HTTP query params">
    <munit:inbound-properties>
        <munit:inbound-property key="http.query.params" value="#[['transactionId': 'x873h3dj']]"/>
    </munit:inbound-properties>
</munit:set>

这会创建一个参数对transactionId: x873h3dj,然后可以根据需要在您的代码中访问它们。 您可以根据常规MEL语法扩展以下结构来添加更多参数:

#[['key1':'val1', 'key2': 'val2', 'key3': 'val3']]

答案 2 :(得分:0)

要添加到上面的答案中,它对应于Mule 3调色板中的“设置消息”组件。

enter image description here