Я использую Apache Camel с весной в моем приложении. В настоящее время я работаю над модульным тестом.Apache Camel Beans Unit Testing
Java Code
DataRoute класс
from("direct:getData") .routeId("getData") .bean(DataService.class, "processData") .marshal().json(JsonLibrary.Jackson) .end();
DataService класс
public Data processData() { return new Data("Hello World"); }
класса данных с геттеры, сеттеры и Джексон метод ToString
private String value;
тест Блок
BaseCamelContextUnitText
public abstract class BaseCamelContextUnitTest extends CamelTestSupport { @Autowired private DataService dataService; @Produce private ProducerTemplate producerTemplate; public CamelContext getCamelContext() { return camelContext; } @Override protected Context createJndiContext() throws Exception { JndiContext context = new JndiContext(); context.bind("dataService", dataService); return context; } @Test public void shouldProcessData() throws Exception { RouteDefinition routeDef = getCamelContext().getRouteDefinition("getData"); routeDef.adviceWith((ModelCamelContext) getCamelContext(), new RouteBuilder() { @Override public void configure() throws Exception { from("direct:getData") .pipeline("bean:dataService?method=processData"); } }); getCamelContext().start(); String responseData = "{" + "\"value\":\"Unit test success\"" + "}"; Object response = producerTemplate.sendBody("direct:getData", ExchangePattern.InOut, null); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ((InputStreamCache) response).writeTo(byteArrayOutputStream); assertThat(new String(byteArrayOutputStream.toByteArray()), is(responseData)); } }
Как издеваются
.bean(DataService.class, "processData")
в блоке тест, чтобы вернуть mock Data Object с его переменной String по умолчанию, как говорят «Успех теста блока», а затем проверить, будет ли маршрут возвращать издеваемый объект вместо объекта с переменной «Hello World» String?