Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Apache Camel and junit test  [new]
kadet
Member

Откуда: Cologne
Сообщений: 541
всем привет.

создал минимальный spring-boot проект для отработки тестов с camel.

При отправке на тест вываливается сообщение что единственный тест не прошел, хотя в предыдущей строке есть сообщение
 ...... o.a.camel.component.mock.MockEndpoint    : Asserting: mock://file:kgw is satisfied


Кто-нибудь сталкивался с это проблемой ?

PS: сам проект прицепил.

К сообщению приложен файл (camel.test.tar - 110Kb) cкачать
3 мар 20, 15:07    [22091691]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
kadet
Member

Откуда: Cologne
Сообщений: 541
screen short прицепил

К сообщению приложен файл. Размер - 138Kb
3 мар 20, 15:12    [22091694]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
kadet,

ну...

	@Override
	public void configure() throws Exception {
		
		from("direct:firstRoute")
			.setBody(constant("Goodbye"))
			.to("file:kgw")
			;
	}


	@EndpointInject(uri = "mock:file:kgw")
	private MockEndpoint mock;
	
	@Test
	public void test1() throws Exception {
		mock.expectedBodiesReceived("Goodbye");
		
		template.asyncSendBody("direct:firstRoute", null);
		
		mock.assertIsSatisfied();
	}


В маршруте вы шлете в итоге в file:kgw, а в тесте мокаете mock:file:kgw - вот в нее ничего не приходит, а изначального говорите, что в нее должно Goodbye прилететь.
3 мар 20, 15:46    [22091738]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
kadet
Member

Откуда: Cologne
Сообщений: 541
Андрей Панфилов
kadet,

ну...

	@Override
	public void configure() throws Exception {
		
		from("direct:firstRoute")
			.setBody(constant("Goodbye"))
			.to("file:kgw")
			;
	}


	@EndpointInject(uri = "mock:file:kgw")
	private MockEndpoint mock;
	
	@Test
	public void test1() throws Exception {
		mock.expectedBodiesReceived("Goodbye");
		
		template.asyncSendBody("direct:firstRoute", null);
		
		mock.assertIsSatisfied();
	}


В маршруте вы шлете в итоге в file:kgw, а в тесте мокаете mock:file:kgw - вот в нее ничего не приходит, а изначального говорите, что в нее должно Goodbye прилететь.


что-то не то.
смотрите, у нас есть маршрут:
1. "Начало" (идентификатор "direct:firstRoute")
2. "Конец" (идентификатор "file:kgw")

В тесте я объявляю, что :

1. "Конец" ("file:kgw") это мок
2. "Конец" ("file:kgw") должен иметь содержимое "Goodbye" ( mock.expectedBodiesReceived("Goodbye"); )

3. При помощи template отправляем сообщение (типа null) в маршрут, который имеет узел "setBody(constant("Goodby"))"

Т.е. несмотря на то что в маршрут отправлено нулевое сообщение, маршрут сам должен его заполнить и мок должен это увидеть и подтвердить.

Однако в терминале (консоль) мы видим, сначало положительное утверждение о выполнении теста и тут же в следующей строке сообщение о провале теста. И общий результат естественно красный. Это меня вообще "выбивает" из колеи

PS: я упростил тест в том, что вместо
template.asyncSendBody("direct:firstRoute", null);

поставил
template.sendBody("direct:firstRoute", null);

но результат тот же. У меня возникает такое впечатление, что тест как-буд-то вызывается два раза

К сообщению приложен файл. Размер - 50Kb
3 мар 20, 17:27    [22091862]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
SpringMan
Member

Откуда:
Сообщений: 139
Поставь лог в маршрут, скорее всего все нормально вызывается один раз. Откуда пример тестов взят? - ставлю на то, что бут с кемелом в этом плане интегрирован весьма фигово, и ничего на самом деле не мокается нормально.
3 мар 20, 17:46    [22091886]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
Андрей Панфилов
Member

Откуда: Москва > Melbourne
Сообщений: 3531
kadet

смотрите, у нас есть маршрут:
1. "Начало" (идентификатор "direct:firstRoute")
2. "Конец" (идентификатор "file:kgw")

В тесте я объявляю, что :

1. "Конец" ("file:kgw") это мок
2. "Конец" ("file:kgw") должен иметь содержимое "Goodbye" ( mock.expectedBodiesReceived("Goodbye"); )


ох...

вы внимательно прочли что я написал? В маршруте у вас "file:kgw", в тесте "mock:file:kgw" (если не особо заметно, то поясню: названия разные), поэтому используя сконфигурированный таким образом маршрут, в "mock:file:kgw" ничего прилететь не может. Если нужно подменять эндпойнты моками, то самый простой вариант - использовать плейсхолдеры: https://camel.apache.org/manual/latest/using-propertyplaceholder.html, тогда в тестах можно свои названия объявить.
3 мар 20, 19:12    [22091940]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
SpringMan
Member

Откуда:
Сообщений: 139
Ну ТС определенно на @MockEndpoints("file:kgw") рассчитывает
3 мар 20, 19:20    [22091942]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
kadet
Member

Откуда: Cologne
Сообщений: 541
SpringMan
Поставь лог в маршрут, скорее всего все нормально вызывается один раз. Откуда пример тестов взят? - ставлю на то, что бут с кемелом в этом плане интегрирован весьма фигово, и ничего на самом деле не мокается нормально.


тест взял [url=]тут[/url]
4 мар 20, 11:44    [22092338]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
kadet
Member

Откуда: Cologne
Сообщений: 541
[quot Андрей Панфилов#22091940]
kadet


вы внимательно прочли что я написал? В маршруте у вас "file:kgw", в тесте "mock:file:kgw" (если не особо заметно, то поясню: названия разные), поэтому используя сконфигурированный таким образом маршрут, в "mock:file:kgw" ничего прилететь не может. Если нужно подменять эндпойнты моками, то самый простой вариант - использовать плейсхолдеры: https://camel.apache.org/manual/latest/using-propertyplaceholder.html, тогда в тестах можно свои названия объявить.


Префикс "mock" в UnitTest в выражении
@EndpointInject("mock:file:kgw")
	private MockEndpoint mock;

"сообщает" движку, что нужно "применить" mock к узлу (EndPoint) "file:kgw" и выполнить инъекцию в переменную "mock" типа "MockEndpoint".
10 мар 20, 15:03    [22096215]     Ответить | Цитировать Сообщить модератору
 Re: Apache Camel and junit test  [new]
kadet
Member

Откуда: Cologne
Сообщений: 541
причина, по которой в этом простом приложении "сваливался" тест, заключалась в том, что аннотация "@Test" имела объявление
import org.junit.jupiter.api.Test;


как только я изменил объявление на
import org.junit.Test;


всё заработало.

PS:
капец просто, все мозги наизнанку вывернул. Так и не понял, почему с "jupiter" отказывается работать.
проект прицепил для желающих

К сообщению приложен файл (camel.test.tar - 140Kb) cкачать
10 мар 20, 15:13    [22096224]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить