Мы используем Spring для DI и Camel для маршрутизации / обмена сообщениями. Меня попросили настроить некоторые (JUnit) модульные тесты для наших различных компонентов (которые все маршрутизируют сообщения друг другу конвейерным способом).
После ознакомления с общим тестированием на верблюдах doc и тестированием Camel-Spring doc, кажется, что предпочтительным методом юнит-тестирования конечных точек верблюда является использование Spring Протестируйте среду контекста , используя подклассы таких объектов, как AbstractJUnit38SpringContextTests
и их сортировку.
У меня абсолютно нулевой опыт работы с любым из этих API. Поэтому, хотя они интересны для чтения, мне сложно представить их в контексте (без каламбура).
Таким образом, есть несколько начальных понятий, с которыми я борюсь:
Например, когда уместно использовать MockEndpoint
, против DataSet
, против Test
?
Также документ Camel-Spring (ссылка выше) содержит следующий пример:
@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
... но я не вижу откуда поступают эти сообщения (как они в первую очередь попадают в конечную точку)!
Итак, мой второй вопрос : каковы стандартные методы определения того, какие конечные точки «заглушить» (макет)? Например, что если одна и та же очередь сообщений JMS используется двумя конечными точками, живущими в двух разных JAR / WAR: один - производитель, а другой - потребитель? В этом случае ProducerComponent
(внутри producer.war
) является конечной точкой Camel, которая отправляет сообщения на someQueue
. И ConsumerComponent
(живущий внутри consumer.war
) - это еще одна конечная точка Camel, потребляющая сообщения от someQueue
.
Как SO организует модульные тесты для обоих компонентов?
Заранее спасибо за любые толчки в правильном направлении!