Mocked Amazon S3 Mule连接器仍然会调用实际的S3操作
问题描述:
我们试图模拟MUNIT套件中的Amazon S3连接器。我们已经尝试过多种方法,但模拟从未似乎工作:Mocked Amazon S3 Mule连接器仍然会调用实际的S3操作
- 对于单个流量增加了S3连接器,我们试图建立一个有效载荷嘲笑响应。但最终的输出总是实际的有效载荷。
- 然后我们将S3调用移动到子流,并试图模拟整个子流调用本身,但它始终调用实际的s3存储桶动作。
- 围绕子流程调用间谍也没有什么区别。
主要流程:
<flow name="helios-s3-copy-file"
processingStrategy="synchronous">
<http:listener config-ref="HTTP_Listener_Configuration" path="/movefile" doc:name="HTTP"/>
<set-variable value="#['Test']" variableName="feedPathPrefix" doc:name="Set feed prefix" />
<set-variable variableName="srcPath"
value="#[feedPathPrefix + '/TestFilemule.xlsx']"
doc:name="Source" />
<set-variable variableName="destPath"
value="#[feedPathPrefix + '/dest/TestFilemule.xlsx']"
doc:name="Destination" />
<flow-ref name="copyactionflowRef" doc:name="copyactionflow"/>
<logger
level="INFO" doc:name="Logger" message="#[flowVars.copyMsg]"/>
<set-payload value="#[flowVars.copyMsg]" doc:name="Set Payload"/>
</flow>
<sub-flow name="copyactionflowRef">
<s3:copy-object config-ref="Amazon_S3__Configuration" sourceBucketName="some-bucket-name" sourceKey="#[srcPath]" destinationBucketName="some-bucket-name" destinationKey="#[destPath]" doc:name="Copy Processed File"/>
<set-variable variableName="copyMsg" value="#['Completed copy from ' + feedPathPrefix + ' to ' + destPath + ' directory']" doc:name="Variable"/>
</sub-flow>
Munit测试用例:
<munit:test name="amazons3test-test-suite-helios-s3-copy-fileTest" description="Testing mocking of copy objects" >
<mock:when messageProcessor="mule:sub-flow" doc:name="Mock2">
<mock:with-attributes>
<mock:with-attribute name="doc:name" whereValue="#['copyactionflowRef']"/>
</mock:with-attributes>
<mock:then-return payload="#['Copy completed payload']">
<mock:outbound-properties>
<mock:outbound-property key="copyMsg" value="Copy complete"/>
</mock:outbound-properties>
</mock:then-return>
</mock:when>
<!-- <mock:spy messageProcessor="mule:sub-flow" doc:name="Spy">
<mock:with-attributes>
<mock:with-attribute name="doc:name" whereValue="#['copyactionflowRef']"/>
</mock:with-attributes>
<mock:assertions-before-call>
<logger message="Must not make actual S3 call" level="INFO" doc:name="Logger"/>
</mock:assertions-before-call>
<mock:assertions-after-call>
<munit:set payload="#['mock payload']" doc:name="Set Message">
<munit:invocation-properties>
<munit:invocation-property key="copyMsg" value="Value from Spy"/>
</munit:invocation-properties>
</munit:set>
</mock:assertions-after-call>
</mock:spy> -->
<flow-ref name="helios-s3-copy-file" doc:name="Flow-ref to helios-s3-copy-file"/>
</munit:test>
我们也记录在骡子论坛上ticket,但我们还没有得到任何的解决方案呢。有谁知道我们如何在Mulesoft中记录Jira?
从其他一些关于stackoverflow的问题来看,许多其他的OOB连接似乎也存在相同的问题。 MUNIT模拟似乎有很多缺陷。
答
从我提供的代码中可以看出,您的Mock组件不会嘲笑子流,因为您的子流没有“doc:name”属性。它只有“名称”属性。所以,你的配置应该像
<mock:with-attributes>
<mock:with-attribute name="name" whereValue="#['copyactionflowRef']"/>
</mock:with-attributes>
的东西,如果这不仍然工作,尝试改变whereValue="#[matchContains('copyactionflowRef')]"
希望这有助于!
使用“matchContains”检查后,子流程正在被模拟。但是,如果S3连接器是同一流的一部分,则模拟对象有效载荷将被重新覆盖。所以,我们的问题只能部分解决。我们仍然需要一种方法来以相同的流程模拟S3连接器。但感谢您的答案。 – gsonal