Есть несколько вещей, которые я не соблюдаю в вашем примере, поэтому я постараюсь сделать все возможное, сделав предположения, и мы можем взять его оттуда.
Во-первых, вы не должны проверять правильность работы стратегии исключения. То есть, если вы вычеркнете исключение, вам нужно предположить, что стратегия исключения (которая является компонентом 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);
}
НТН
согласен .. Но здесь у меня нет возможности изменять код, так что поставить некоторый вход для MUNIT. Так ли это как тупик, где я нахожусь? Ничто не похоже на то, где мы можем поймать исключение из runFlow и подать в стратегию исключения, чтобы мы могли получить результат из этого? – Renjith
Нет, извините, нет – Dds
oops !!. это очень грустно – Renjith