Есть пара вещей, которым я не следую в вашем примере, поэтому я постараюсь сделать все возможное, делая предположения, и мы можем исходить из этого.
Во-первых, вам не следует проверять правильность работы стратегии исключений. То есть, если вы выдаете исключение, вам нужно предположить, что стратегия исключения (которая является компонентом Mule) работает должным образом, и она перехватит исключение. В противном случае вы закончите тестирование каждого компонента.
Более точным тестом было бы убедиться, что поток генерирует правильное исключение (что вы можете сделать с помощью MUnit).
Если вы хотите проверить, что логика внутри стратегии исключений работает правильно, я бы сказал, что она достаточно сложна, чтобы вы захотели ее протестировать, поэтому она должна быть как минимум в подпотоке. Таким образом вы можете убедиться, что подпоток работает правильно.
Теперь о том, что вы описали, если вы выполняете runFlow, а исключение не кэшируется, это связано с тем, что производственный код может иметь ошибку. Вы упоминаете глобальную стратегию исключений, поэтому, основываясь на этом, вот пример кода (как я думаю), ваш код должен выглядеть так:
<configuration defaultExceptionStrategy-ref="zCatch_Exception_Strategy" doc:name="Configuration" />
<flow name="zFlow">
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[throw new java.lang.RuntimeException()]]></scripting:script>
</scripting:component>
</flow>
<catch-exception-strategy name="zCatch_Exception_Strategy">
<logger message="+++ ERROR" level="INFO" doc:name="Logger"/>
<set-variable variableName="error_var" value="#['value]" doc:name="Variable"/>
</catch-exception-strategy>
Обратите внимание, что в дополнение к глобальной стратегии исключений вам также необходимо определить defaultExceptionStrategy.
<configuration defaultExceptionStrategy-ref="zCatch_Exception_Strategy" doc:name="Configuration" />
Это приведет к тому, что ваши исключения потока будут обрабатываться этим. Если вы этого не сделаете, стратегия исключений никогда не узнает, что было создано исключение.
Тем не менее, вот тестовый код:
<munit:test name="z-test-suite-zFlowTest" description="Test">
<flow-ref name="zFlow" doc:name="Flow-ref to zFlow"/>
<munit:assert-on-equals message="oops" expectedValue="#['value']" actualValue="#[flowVars['error_var']]" doc:name="Assert Equals"/>
</munit:test>
Теперь, когда вы сказали, что использовали runFlow, я считаю, что вы работаете с тестом на основе Java (хотя я бы посоветовал вам использовать подход к тестированию на основе XML), вот пример Java:
@Test
public void theTest() throws MuleException, Exception {
MuleEvent result = runFlow("zFlow", testEvent(""));
String v = (String) result.getMessage().getProperty("error_var", PropertyScope.INVOCATION);
Assert.assertEquals("value", v);
}
ХТН
person
Dds
schedule
03.05.2016