如何在MUnit测试中验证Mule 4 JMS发布的jms:properties参数
在Mule 4中验证Mock JMS发布的自定义属性
Mule 4重构了消息模型,不再沿用Mule 3中的message.outboundProperties,要验证JMS发布时的自定义属性,需要通过MUnit的参数捕获结合断言来实现,具体步骤如下:
1. 修改Mock配置以捕获消息构建参数
在你的mock-when配置中添加参数捕获逻辑,捕获JMS消息的构建器对象,后续可从中提取自定义属性:
<munit-tools:mock-when doc:name="Mock Place file on some queue" processor=".*:.*"> <munit-tools:with-attributes> <munit-tools:with-attribute attributeName="doc:name" whereValue="#[['Place file on some queue']]" /> </munit-tools:with-attributes> <!-- 捕获JMS消息构建器参数 --> <munit-tools:capture-arguments> <munit-tools:argument name="messageBuilder" /> </munit-tools:capture-arguments> <munit-tools:then-return> <munit-tools:payload value="#[payload]" mediaType="application/xml" /> </munit-tools:then-return> </munit-tools:mock-when>
这里的messageBuilder是JMS发布器用于构造消息的核心对象,包含所有配置的消息属性、correlationId等信息。
2. 添加属性验证逻辑
通过MUnit的断言组件或verify-call来验证捕获到的属性值是否符合预期:
方式一:使用断言组件直接验证
<!-- 验证prop1的值 --> <munit:assert-that doc:name="Assert prop1 matches expected value" expression="#[munitTools.capturedArguments('Mock Place file on some queue').messageBuilder.properties.prop1]" is="#[MunitTools.equalTo('你的预期prop1值')]" /> <!-- 验证prop2的值 --> <munit:assert-that doc:name="Assert prop2 matches expected value" expression="#[munitTools.capturedArguments('Mock Place file on some queue').messageBuilder.properties.prop2]" is="#[MunitTools.equalTo('你的预期prop2值')]" />
方式二:使用verify-call进行参数验证
<munit-tools:verify-call processor=".*:publish" doc:name="Verify JMS properties are correct"> <munit-tools:with-attributes> <munit-tools:with-attribute attributeName="doc:name" whereValue="#[['Place file on some queue']]" /> </munit-tools:with-attributes> <munit-tools:arguments> <!-- 验证prop1等于预期值 --> <munit-tools:argument expression="#[messageBuilder.properties.prop1 == '你的预期prop1值']" /> <!-- 验证prop2等于预期值 --> <munit-tools:argument expression="#[messageBuilder.properties.prop2 == '你的预期prop2值']" /> </munit-tools:arguments> </munit-tools:verify-call>
关键说明
- 若测试中通过
vars设置属性值,可直接将断言中的预期值替换为vars.expectedProp1、vars.expectedProp2,提升测试数据的灵活性。 - 需确保捕获的参数名称为
messageBuilder,这是Mule 4 JMS发布器对应的消息构建参数名,不可随意修改。
内容的提问来源于stack exchange,提问作者Ferenc Kiss
相关产品推荐
相关产品推荐

