Wir versuchen, den Amazon S3-Connector in einer MUNIT-Suite zu verhöhnen. Wir haben bereits mehrere Ansätze ausprobiert, aber der Schein scheint nie zu funktionieren:Mocked Amazon S3 Mule-Connector ruft noch tatsächliche S3-Aktion auf
- Für einen S3-Connector in Single-Flow hinzugefügt, haben wir versucht, eine mocked Payload-Antwort zu erstellen. Aber die endgültige Ausgabe ist immer die tatsächliche Nutzlast.
- Dann haben wir den S3-Aufruf in einen Sub-Flow verschoben und versucht, den ganzen Sub-Flow-Aufruf selbst zu verspotten, aber er ruft immer noch die eigentliche s3-Bucket-Aktion auf.
- Mit einem Spion um den Sub-Flow-Aufruf auch keinen Unterschied gemacht.
Hauptfluss:
<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 Testfall:
<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>
Wir protokolliert auch ein ticket in Mule-Foren, aber wir haben keine Lösungen noch bekam. Weiß jemand wie man einen Jira in Mulesoft protokollieren kann?
Aus einigen anderen Fragen zu Stackoverflow scheint dasselbe Problem für viele andere OOB-Verbindungen vorhanden zu sein. MUNIT Mock scheint viele Fehler zu haben.
Nach der Verwendung der "matchContains" -Kontrolle wird der Sub-Flow verspottet. Aber wenn der S3-Connector Teil desselben Flusses ist, wird die Nutzlast des Mocked-Objekts wieder überschrieben. Also, unser Problem ist nur teilweise gelöst. Wir brauchen immer noch eine Möglichkeit, den S3-Connector im selben Fluss nachzuahmen. Danke für die Antwort. – gsonal