2016-11-14 9 views
-1

я весной следующего года по маршруту:Весна Тестирование содержимого 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("[email protected]"); 
     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'.

Что касается тестирования, это действительно зависит от типа теста. Здесь, вы делаете тестирование интеграции, так что я бы проверить, что эффекты, как и ожидалось - DB изменился так, как надо и т.д. Но так как маршрут только делает некоторые протоколирование, то я бы изменить:

<log message="Cc: ${in.header.Value}" /> 

в

<log message="Cc: ${in.header.Value}" /> 
<to uri="mock:choice-triggered" /> 

, а затем проверить, что конечная точка mock:choice-triggered получил сообщение (или нет, в зависимости от сценария). Но при проверке реального маршрута вы, вероятно, захотите проверить, что некоторые данные были вставлены в БД или какое-то сообщение, опубликованное в MQ, или что отправлено электронное письмо.

Что касается ваших постоянных, я бы посоветовал использовать внешние свойства - как Camel, так и Spring имеют отличную поддержку для заполнителей свойств, я предлагаю вам попробовать.

+0

Привет, благодарю вас за помощь. Я считаю, что я был очень смущен простым выражением, поскольку Value является фактическим свойством в моем пользовательском компоненте (только частично написанном мной), который только сопоставляется с «Value». Поэтому, пожалуйста, поправьте меня, если я ошибаюсь, я считаю, что мне нужно создать экземпляр этого значения с фактическим адресом электронной почты, а затем отправить его через sendBodyAndHeader, правильно? – paranza

+0

Да, я подумал, что мне нужно иметь конечную точку (макет), чтобы проверить, получено ли сообщение (внутри ). Однако я не могу изменить маршрут весны. Есть ли способ (который действительно то, что я искал), чтобы ввести еще один макет, но только в тесте? – paranza

+0

Могу ли я иметь более одного конечного пункта в моем маршруте? У меня есть простой журнал: сообщение, которое я хочу проверить, а также условие выбора. – paranza

 Смежные вопросы

  • Нет связанных вопросов^_^