Мы используем Spring для DI и Camel для маршрутизации/обмена сообщениями. Меня попросили настроить некоторые (JUnit) модульные тесты для наших различных компонентов (которые все маршрутизируют сообщения друг к другу по конвейерной схеме).Проверка Apache Camel
После взятия гусаков на общем Camel testing документе и Camel-Spring testing дока, похоже, предпочтительного метод модульного тестирования верблюда конечных точек лежит через Spring Framework Test контексте с использованием подклассов объектов, такими как AbstractJUnit38SpringContextTests
и сорта.
У меня абсолютно нет опыта с любым из этих API. Поэтому, хотя они делают для интересного чтения, мне сложно помещать их в контекст (каламбур не предназначен).
Как таковой существует несколько начальных понятий я борюсь с:
С одной стороны, когда уместно использовать MockEndpoint
, против DataSet
, против Test
?
Кроме того, Camel-Спринг документ (ссылка выше) приводится следующий пример:
@ContextConfiguration
public class MyCamelTest extends AbstractJUnit38SpringContextTests {
@Autowired
protected CamelContext camelContext;
@EndpointInject(uri = "mock:foo")
protected MockEndpoint foo;
public void testMocksAreValid() throws Exception {
// lets add more expectations...
MockEndpoint.assertIsSatisfied(camelContext);
// now lets do some further assertions
List<Exchange> list = foo.getReceivedExchanges();
for (Exchange exchange : list) {
Message in = exchange.getIn();
...
}
}
}
Если я даже начала понять этот API, то кажется, что над ним кодом прочитав все сообщения от MockEndpoint
по имени mock:foo
... но я не вижу, откуда эти сообщения (откуда они попадают в конечную точку в первую очередь)!
Итак, мой второй вопрос:: Каковы стандартные методы определения конечных точек для «заглушки» (mock)? Например, что, если одна и та же очередь сообщений JMS используется двумя конечными точками, живущими внутри двух разных JAR/WARs: один производитель, а другой - потребитель? В этом случае ProducerComponent
(проживает внутри producer.war
) является конечной точкой верблюда, которая толкает сообщения на someQueue
. И ConsumerComponent
(живущий внутри consumer.war
) является еще одной конечной точкой Верблюда, которая отправляет сообщения от someQueue
.
Каким образом SO организует единичные тесты для обоих компонентов?
Заранее благодарим за любые подталкивания в правильном направлении!
Thanks Francis! – IAmYourFaja