В нашем проекте мы не создаем фиктивный FTP-сервер для тестирования маршрута, но мы используем свойства, которые можно заменить на file
Camel Component для локальной разработки и модульного тестирования.
Ваш код будет выглядетькак это:
public class MyRoute extends RouteBuilder
{
@Override
public void configure()
{
onException(EdiOrderParsingException.class)
.handled(true)
.to("{{myroute.error}}");
from("{{myroute.input.endpoint}}")
.bean(new OrderEdiTocXml())
.convertBodyTo(String.class)
.convertBodyTo(Document.class)
.choice()
.when(xpath("/cXML/Response/Status/@text='OK'"))
.to("{{myroute.valid.endpoint}}}")
.otherwise()
.to("{{myroute.invalid.endpoint}}");
}
}
И локально, и для тестирования системы мы используем конечную точку файла, объявленную в файле свойств:
myroute.input.endpoint=file:/home/user/myproject/input
myroute.valid.endpoint=file:/home/user/myproject/valid
myroute.invalid.endpoint=file:/home/user/myproject/invalid
myroute.error=file:/home/user/myproject/error
или в JUnit CamelTestSupport вы можете использовать useOverridePropertiesWithPropertiesComponent
метод, чтобы установить свойства, которые вы хотите переопределить.
В качестве альтернативы вы можете использовать вместо этого «прямой» маршрут, но вы можете пропустить некоторые параметры файла, которые могут быть проверены модульным тестом.
И мы проверяем только соединение FTP сРеальная система, установив свойства, подобные этим:
myroute.input.endpoint=ftp://hostname/input
myroute.valid.endpoint=ftp://hostname/valid
myroute.invalid.endpoint=ftp://hostname/invalid
myroute.error=ftp://hostname/error
При этом вы также можете иметь другую конфигурацию, например, для производственного сервера, которая будет отличаться от среды тестирования интеграции.
Пример свойств для производстваокружение:
myroute.input.endpoint=ftp://hostname-prod/input
myroute.valid.endpoint=ftp://hostname-prod/valid
myroute.invalid.endpoint=ftp://hostname-prod/invalid
myroute.error=ftp://hostname-prod/error
По моему мнению, вполне допустимо использовать конечную точку файла для упрощения кода JUnit, и он будет проверять только маршрут, а не соединение.
Проверка соединения болеекак Интеграционный тест, и должен выполняться на реальном сервере, связанном с реальной внешней системой (в вашем случае FTP-серверы, но могут быть и другие конечные точки / системы).
Используя свойства, вы также можете настроить различные URL-адреса для каждой среды (например: у нас есть 3 среды тестирования и одна производственная среда, все с разными конечными точками).