Тестирование маршрута Apache Camel с vm и файловым компонентом через ftp

У меня есть два очень простых маршрута (код ниже не является исходным классом, я упростил его, например, удалил сеттеры, журналы и т. д.)

Первый маршрут:

public static final String MESSAGE_CONSUMER = "vm:myMessage";

public String myXmlProducer; //and getter method then

myXmlProducer = "file:myFileLocation?autoCreate=true&fileName="+ myFileName;
from(MESSAGE_CONSUMER)
    //some process here
    .to(myXmlProducer);

и второй:

public String fileConsumer = "file:myFileLocation";
public String ftpProducer = "ftp://ftpIp?username=username&password=password&maximumReconnectAttempts=0";

from(fileConsumer)
    .to(ftpProducer );

Я пытаюсь написать тест для этих двух маршрутов, вот часть моего тестового класса,

часть конфигурации в классе:

public static final String MOCK_OUT = "mock:out";
public static final String DIRECT_IN = "direct:in";
public static final String MOCK_XML_URI = "mock:xmlFile";
...
@EndpointInject(uri = MOCK_OUT)
MockEndpoint mockOut;

@EndpointInject(uri = MOCK_XML_URI)
MockEndpoint mockXmlUri;
...

@Override
public RouteBuilder[] createRouteBuilders() {
    final MyRoute route = new MyRoute();
    route.setFtpProducer (MOCK_OUT);

    RouteBuilder testHarness = new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from(DIRECT_IN).routeId("testHarness.in")
                .to(MyRoute.MESSAGE_CONSUMER)

            from(route.getMyXmlProducer())
                .convertBodyTo(Byte.class)
                .to(mockXmlUri)
        }
    };
    return new RouteBuilder[] {route, testHarness};
}

@Before
public void getTestData() throws IOException {
    testInputData = IOUtils.toString(this.getClass().getResourceAsStream("/myTarget/inputData.txt"));
}

Этот метод тестирования зеленый:

@Test
public void testRoutingOk() throws InterruptedException {
    mockOut.setExpectedMessageCount(1);
    mockOut.message(0).body().isEqualTo(testInputData);

    template.sendBody("file:myTestFileLocation", testInputData);
    assertMockEndpointsSatisfied();
}

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

@Test
public void testRoutingOk() throws InterruptedException {
    mockXmlUri.setExpectedMessageCount(1);
    mockXmlUri.message(0).body().isEqualTo(testInputData);

    template.sendBody(DIRECT_IN, testInputData);
    assertMockEndpointsSatisfied();
}

Я получаю ошибку актива, вообще никакого сообщения:

java.lang.AssertionError: mock://xmlFile Received message count. Expected: <1> but was: <0>

Есть ли кто-нибудь, кто может мне помочь, пожалуйста.


person Sheri    schedule 07.08.2015    source источник


Ответы (1)


После нескольких дней борьбы я нашел, в чем проблема. Я отправляю сообщение в тело, но это сообщение будет использоваться другим маршрутом. Я использую версию 2.10, решение для зеленого модульного теста - остановить маршрут. С текущей версией (2.10) это будет немного сложно, так как я должен изменить свои основные классы только для модульных тестов. Но я могу использовать controlbus: вместо этого, если мы обновим наш верблюд до 2.11+.

person Sheri    schedule 12.08.2015