1

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

该流程需要设置一些 URL 参数,并使用标准符号在整个过程中访问这些参数:#[message.inboundProperties.'http.query.params'.test].

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

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

我尝试了几件事:

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

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

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

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

我在这里这里寻找过类似的问题,但它们似乎对我没有帮助。

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

谢谢!

4

3 回答 3

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>
于 2017-02-09T11:21:09.780 回答
0

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

在此处输入图像描述

于 2020-11-25T05:40:10.327 回答
0

好吧,事实证明,如果您足够努力,Mule 文档就有答案;)答案就在这里

您只需munit:set在 MUnit 测试流程开始时添加该组件(在您的 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']]
于 2016-09-23T02:25:37.333 回答