Есть ли способ с помощью MUnit завершить тест и добавить утверждения при вызове подпотока? Я хотел бы разделить тесты на более мелкие части.
Исключить подпоток с помощью MUnit
Ответы (4)
Вам придется издеваться над результатом подпотока.
Для этого вам нужно использовать компонент Mock в MUnit.
Что он делает, так это то, что вам нужно будет определить ожидаемый результат после вызова ссылки подпотока/потока.
Вот краткий пример:
<mock:when messageProcessor=".*:.*" doc:name="Mock Get Email Recipient">
<mock:with-attributes>
<mock:with-attribute name="doc:name" whereValue="#['getEmailRecipient']"/>
</mock:with-attributes>
<mock:then-return payload="[email protected]" mimeType="text/plain"/>
</mock:when>
Это имитирует поток getEmailRecipient, возвращая статическое значение [email protected] при его вызове в тесте.
Не уверен, что это работает, но, возможно, вы могли бы попытаться смоделировать результат подпотока с помощью обработчика фиктивных сообщений, например
<mock:when messageProcessor="mule:sub-flow">
<mock:with-attributes>
<mock:with-attribute whereValue="<the_name_of_your_subflow>" name="doc:name"/>
</mock:with-attributes>
</mock:when>
См. документацию здесь
Надеюсь, поможет.
/T
Как сказали ребята, добиться желаемого можно с помощью мока. Просто чтобы было ясно, вы не остановите тест, вы просто определите поведение, которое должно быть выполнено, вместо фактического кода. Утверждения появятся позже в вашем тесте.
Вот несколько страниц документации, которые помогут вам в этой теме:
- Насмешка
- Насмешливая подпрограмма потоки (крайний случай)
- Моки в Java а>
Наконец, несмотря на то, что каждый процессор сообщений MUnit имеет пример Java внизу каждой страницы документа, есть специальная страница о том, как написать тест MUnit на основе Java:
Документация здесь объясняет насмешливый поток и подпоток в xml.
Чтобы имитировать подпоток в Java, вы должны использовать сопоставитель org.mule.modules.interceptor.matchers.Matchers.contains
внутри withValue
.
Аргументы для содержимого должны быть именем вашего подпотока или любой строкой шаблона регулярного выражения.
whenMessageProcessor("sub-flow")
.withAttributes(
Attribute.attribute("name")
.withValue(Matchers.contains("my-subflow-name")))
.thenThrow(new Exception("Test"));
Тот же трюк работает и для имитации подпотока в verifyMessageProcessor
.
ХТХ!