2014-10-22 3 views
0

Есть ли способ насмешки часть верблюда маршрут?Выкачать или инкапсулировать часть верблюда маршрут

Я построить такой маршрут:

from("a").b().signReq().send().validateAns().c().to("d"); 

, но когда я запускаю тесты, я не хочу добавить signReq() отправить() validateAns() в пути... Какие-либо предложения?

Кроме того, может быть, есть способ инкапсулировать такую ​​часть маршрута в метод? Это будет здорово, потому что у меня много маршрутов и много одинаковых частей взаимодействия. Лучше всего, если это можно сделать без выбора времени исполнения/при переключении, потому что я знаю все условия в фазе настройки.

+2

Я не знаю тип возврата каждого из ваших методов, которые вы пытаетесь высмеять, но имейте в виду, что вы можете частично издеваться над объектом. Взгляните на это: http://stackoverflow.com/questions/14970516/use-mockito-to-mock-some-methods-but-not-others –

+0

Спасибо за предложение! Но есть много, чтобы издеваться над этими объектами, я хочу высмеять и/или инкапсулировать всю часть маршрута. – cynepnaxa

+0

Как правило большого пальца, если его трудно проверить, его время для рефакторинга. –

ответ

0

Для тестирования существующих маршрутов вы можете использовать AdviceWith и проконсультировать маршрут до его тестирования.

Я предлагаю использовать weaveById, который является самым точным способом замены частей маршрута.

Например, в следующем маршруте

from("direct:start") 
    .to("mock:foo") 
    .to("mock:bar").id("bar") 
    .to("mock:result"); 

После установки идентификатора «макет: бар» на «бар», то вы можете использовать в тесте

context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() { 
     @Override 
     public void configure() throws Exception { 
      // weave the node in the route which has id = bar 
      // and replace it with the following route path 
      weaveById("bar").replace().multicast().to("mock:a").to("mock:b"); 
     } 
    }); 

В вас, например, вы можете сделать что-то вроде:

from("a").b().to("direct:replace").id("replace").c().to("d"); 

from("direct:replace").signReq().send().validateAns(); 

А потом советы маршрут с помощью:

weaveById("replace").remove(); 

Конечно, существует множество способов реализации этой функции. Для всех вариантов и полный пример перейти к http://camel.apache.org/advicewith.html

Совет: Дайте дополнительное внимание к той части кода в примере, который начинается контекст!

// we must manually start when we are done with all the advice with 
     context.start(); 
Смежные вопросы