Весеннее тестирование маршрутизатора на основе контента Camel
У меня есть следующий весенний маршрут:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="activemq:topic:inbox" />
<choice>
<when>
<simple>${in.header.Value}</simple>
<log message="Cc: ${in.header.Value}" />
</when>
</choice>
<to uri="mock:result" />
</route>
</camelContext>
У меня есть требование использовать Spring Testing (CamelSpringJUnit4ClassRunner), хотя я нашел простые для понимания примеры того, как проверить условие с помощью Java DSL. Мой тестовый класс выглядит так:
@RunWith(CamelSpringJUnit4ClassRunner.class)
@BootstrapWith(CamelTestContextBootstrapper.class)
@ContextConfiguration(locations = "file:src/main/resources/META-INF/spring/camel-context-activemq-embedded.xml")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@MockEndpoints("log:*")
@DisableJmx(false)
public class MyTest{
private Logger LOG = LogManager.getLogger(MyTest.class.getName());
protected Exchange exchange;
protected CustomComponent customComponent= new CustomComponent();
@Produce(uri = "activemq:topic:inbox")
protected ProducerTemplate template;
@EndpointInject(uri = "mock:result")
protected MockEndpoint resultEndpoint;
@Test
public void tes1() throws InterruptedException {
String headerValue= MyComponent.Value;
EmailAddress recipients = new EmailAddress("recipient@example.com");
template.sendBodyAndHeader("activemq:topic:inbox", recipients.toString(), headerValue);
resultEndpoint.expectedBodiesReceived(headerValue);
resultEndpoint.expectedHeaderReceived("header value", headerValue);
resultEndpoint.expectedMessageCount(1);
}
Я изо всех сил пытаюсь понять, как проверить фактическое состояние, продиктованное ЦБ РФ, но, что более важно, я сомневаюсь, является ли это даже правильным способом проверки. MyComponent.VALUEConstant - это свойство, указанное в моем пользовательском компоненте, и вышеприведенный тест фактически проходит. Однако, если я создаю экземпляр headerValue с другим свойством в моем компоненте и, следовательно, условие, как предполагается, не выполняется, тест проходит. Можете ли вы помочь?
Спасибо,
я
1 ответ
Ну, первое, что я вижу, это то, что вашему простому выражению не хватает сравнения - вероятно, оно должно быть ${in.header.value} == 'wanted value'
,
Что касается тестирования, то это действительно зависит от типа теста. Здесь вы проводите интеграционное тестирование, поэтому я бы проверил, что эффекты ожидаемые - БД изменилась так, как должна и т. Д. Но, поскольку ваш маршрут выполняет только некоторые записи, я бы изменил:
<log message="Cc: ${in.header.Value}" />
в
<log message="Cc: ${in.header.Value}" />
<to uri="mock:choice-triggered" />
а затем убедитесь, что mock:choice-triggered
конечная точка получила сообщение (или не получила, в зависимости от сценария). Но при тестировании реального маршрута вы, вероятно, захотите убедиться, что некоторые данные были вставлены в БД или какое-то сообщение опубликовано в MQ или что электронное письмо было отправлено.
Что касается вашей константы, я бы посоветовал вам использовать внешние свойства - и Camel, и Spring имеют отличную поддержку заполнителей свойств, я предлагаю вам попробовать.