我有一个我想测试的流程。该流具有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会随机分配一个端口进行测试,而我似乎无法在运行时访问此端口。因此我无法调用端点。
我在其他地方寻找类似的问题here和here,但它们似乎对我没有帮助。
所以我的基本问题是:在从MUnit测试中进行测试时,如何设置流可以访问的URL参数。是否有更好的方法来实现我想在这里实现的目标?
谢谢!
答案 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)