Camel - отправка сообщений на ложные входы - PullRequest
1 голос
/ 10 августа 2011

Как заменить усиленную входную конечную точку на макет и отправить ей сообщение?

Скажем, у меня следующий маршрут.

from("spring-ws:rootqname:{http://myNameSpace}SomeRequest?endpointMapping=#endpointMapping").
    processor(new VeryComplicatedProcessor()).
    to(etc).
    to(etc)...

Другими словами, весенний веб-сервис, который выполняет обработку всей лототы.

Один из способов проверить этот маршрут - запустить веб-сервис на веб-сервере и отправить ему сообщение, но это намного больше затрат, чем я хотел бы.

Вместо этого я ожидал бы, что если я высмею все мои конечные точки , я смогу сделать это:

public class RouteTest extends CamelSpringTestSupport {

    @Override
    public String isMockEndpoints() {
        return "*";   // mock everything
    }

    @Test
    public void simpleDirectTest() throws Exception {

        String realURI = "spring-ws:rootqname:{http://myNameSpace}SomeRequest?endpointMapping=#endpointMapping";
        String mockedURI = "mock:" + realURI;
        String msg = buildSomeSoapMsg();

        Object out = template.requestBody(mockedURI, msg);
        log.debug(out.toString());
    }
...
}

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

Неужели мое понимание ложных слов неверно? Если да, есть ли альтернативный способ добиться этого? Я действительно хотел бы избежать необходимости запускать веб-сервис для тестирования этих маршрутов.

Спасибо всем.

РЕДАКТИРОВАТЬ - Выглядело так, будто я мог использовать AdviceWith для решения этой проблемы, но AdviceWith, похоже, работает только с выходами, а не с входами, как в случае выше.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

В Apache Camel 2.9 в совете есть новый метод replaceFrom, который позволяет заменить потребителя перед модульным тестированием другой конечной точкой.Например, вы могли бы заменить пружину с прямой конечной точкой.А затем отправьте сообщение этой прямой конечной точке в вашем модульном тесте.На той же строчке, что и Бен, размещенный выше в его ответе.Подробности см .: http://camel.apache.org/advicewith.html

1 голос
/ 11 августа 2011

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

from("spring-ws:rootqname:  {http://myNameSpace}SomeRequest?endpointMapping=#endpointMapping").
.to("direct:processRequest");

from("direct:processRequest").
processor(new VeryComplicatedProcessor()).
to(etc).
to(etc)...

Другой вариант - просто включить веб-сервис в модульном тесте и использовать клиентские API-интерфейсы HTTP для имитации запросов к реальному маршруту. Смотрите примеры camel-spring-ws

Наконец, если вам действительно нужно заменить конечную точку для теста, используйте properties для переопределения определения конечной точки или adviceWith или перехват стратегии для предоставления у вас еще больше гибкости (хотя на первый взгляд это может сбивать с толку) ...

...