Насмешливые конечные точки Camel с настроенным пружиной camelContext - PullRequest
1 голос
/ 28 февраля 2012

Я пытаюсь найти «правильный» способ макетирования конечной точки в интеграционном тесте, который использует поддержку весенних тестов.

Код работает, но мне интересно, если этоправильный способ сделать это.Я посмотрел на тестовый набор для тестирования верблюдов и он advice с , но это бесполезно, когда Spring отвечает за загрузку camelContex в тесте, верно?

Это то, что яесть:

Служба:

@Service
public class FtpOutboundFileStrategy implements OutboundFileExportStrategy {
    private final String FTP_PATTERN= "{0}://{1}@{2}";
    private final ProducerTemplate producerTemplate;

    @Autowired
    public FtpOutboundPriceFileStrategy(ProducerTemplate producerTemplate) {
        this.producerTemplate = producerTemplate;
    }

    @Override
    public void doExport(OutboundFile file, ExportProperties exportProperties) {
        this.producerTemplate.sendBodyAndHeader(createFtpUri(exportProperties),
                file.getFileContent(), Exchange.FILE_NAME, file.getFileName());
    }
}

Интеграционный тест:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:testDB.xml", "classpath:applicationContext.xml"})
public class FtpOutboundFileStrategyIT {

    @EndpointInject(uri = "mock:ftp")
    protected MockEndpoint fakeEndpoint;

    @Autowired
    FtpOutboundFileStrategy ftpOutboundPriceFileStrategy;

    @Autowired
    protected CamelContext camelContext;

    @DirtiesContext
    @Test
    public void directsToFtpEndpoint() throws Exception {
        camelContext.addEndpoint("ftp://foo@localhost", fakeEndpoint);

        fakeEndpoint.expectedBodyReceived().equals("This is the file");
        ftpOutboundPriceFileStrategy.doExport(new OutboundFile("This is the file"),
                new ExportProperties("foo", "localhost"));
        fakeEndpoint.assertIsSatisfied();
    }
}

Теперь это работает,но мне интересно, если это что-то вроде хака:

camelContext.addEndpoint("ftp://foo@localhost", fakeEndpoint);

Я где-то читал, что использование @EndpointInject(uri = "mock:ftp") создаст поддельную конечную точку с более высоким значением, чем у FtpEndpoint по умолчанию, но если я оставлю это внетест не пройден, потому что он использует значение по умолчанию.

Еще одна странная вещь заключается в том, что если я использую "ftp *" вместо "ftp: // foo @ localhost" inПриводит нас к выводу, что тест также проваливается, и это заставляет меня поверить, что это неправильный способ сделать это.

Любая помощь очень ценится!

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

Я думаю, что Дэвид Валери работает над улучшением верблюжьей пружины, чтобы иметь возможность делать больше вещей с верблюдом с помощью чистого комплекта для весенней проверки. Есть билет JIRA, так что следите за улучшениями в будущем.

Сначала вы можете использовать заполнители свойств Spring для замены uris конечной точки, поэтому при выполнении тестов вы можете заменить фактические конечные точки ftp на фиктивную конечную точку и т. Д.

См. Этот FAQ об ограничениях Spring XML http://camel.apache.org/how-do-i-use-spring-property-placeholder-with-camel-xml.html

Глава 6 в книге «Верблюд в действии» также описывает, как проводить тестирование с использованием заполнителей свойств Spring, и имеет файл test.properties и production.properties, который содержит фактическую Uris конечной точки.

В качестве альтернативы в вашем методе тестирования вы можете использовать Camel advice-with API, чтобы изменить маршрут и еще много чего перед запуском теста. Подробности здесь: http://camel.apache.org/advicewith.html

0 голосов
/ 17 октября 2014

Попробуйте расширить тестовый класс с помощью

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyConfigurationClass.class)
//this could be an xml file as well with locations attribute
public class CamelRoutesTest extends AbstractJUnit4SpringContextTests{

У меня была похожая проблема. Исправлена ​​проблема, связанная с camelContext и applicationContext

0 голосов
/ 28 февраля 2012

Я написал небольшую статью об использовании mockAllEndpoints новой функции Camel (> 2.7).Вы также можете найти официальную документацию здесь .

...