верблюд макет - MockEndpoint.whenAnyExchangeReceived метод процесса не выполняется - PullRequest
0 голосов
/ 06 мая 2018

У меня есть пример кода ниже, почему метод процесса в MockEndpoint.whenAnyExchangeReceived НЕ выполняется?

Я ожидаю, что ответ «Ожидаемое тело от ложного удаленного HTTP-вызова», но фактический ответ - это то, что было передано в запросе («Верблюжий камень»).

public class CamelMockRemoteHttpCallTest extends CamelTestSupport {

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:start")
                    .to("http://abc/bcd")
                    ;
            }
        };
    }

    @Override
    public String isMockEndpointsAndSkip() {
        return "http://abc/bcd";
    }

    @Test
    public void testSimulateErrorUsingMock() throws Exception {
        MockEndpoint http = getMockEndpoint("mock:http://abc/bcd");

        http.whenAnyExchangeReceived(new Processor() {
            public void process(Exchange exchange) throws Exception {
                exchange.getOut().setBody("Expected Body from mock remote http call");   //why this line doesn't execute
            }
        });

        String response = template.requestBody("direct:start", "Camel rocks", String.class);

        assertEquals("Expected Body from mock remote http call", response);  //failed, the actual response is "Camel rocks"
    }
}

1 Ответ

0 голосов
/ 06 мая 2018

Я добавил несколько точек останова в ваш тест, и кажется, что автоматически созданная конечная точка макета равна mock://http:abc/bcd, а не mock:http://abc/bcd.

Чтобы выяснить, почему это происходит, вы можете обратиться к методу org.apache.camel.impl.InterceptSendToMockEndpointStrategy#registerEndpoint, который вызывается как часть автоматической регистрации конечной точки. // удалено из http URI. И затем к org.apache.camel.util.URISupport#normalizeUri методу, где // добавляется для mock префикса uri.

В реализации InterceptSendToMockEndpointStrategy также есть хороший комментарий, но я не смог найти его в документации.

// создаем фиктивную конечную точку, которую мы будем использовать как перехватчик
// replace: // from, чтобы облегчить поиск фиктивной конечной точки, не имея double: // in uri

Когда вы изменяете его на getMockEndpoint("mock://http:abc/bcd"), тест проходит.

Лучший способ избежать этих проблем - передать false в качестве второго параметра метода getMockEndpoint(), если вы ожидаете уже созданную конечную точку. Это вызовет исключение, если фиктивная конечная точка не существует. В противном случае создается новая фиктивная конечная точка по требованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...