Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache Camel and junit test / 10 сообщений из 10, страница 1 из 1
03.03.2020, 15:07
    #39933570
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
всем привет.

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

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



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

PS: сам проект прицепил.
...
Рейтинг: 0 / 0
03.03.2020, 15:12
    #39933573
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
screen short прицепил
...
Рейтинг: 0 / 0
03.03.2020, 15:46
    #39933602
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
kadet,

ну...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	@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 прилететь.
...
Рейтинг: 0 / 0
03.03.2020, 17:27
    #39933671
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
Андрей Панфилов
kadet,

ну...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	@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: я упростил тест в том, что вместо
Код: java
1.
template.asyncSendBody("direct:firstRoute", null);


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


но результат тот же. У меня возникает такое впечатление, что тест как-буд-то вызывается два раза
...
Рейтинг: 0 / 0
03.03.2020, 17:46
    #39933681
SpringMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
Поставь лог в маршрут, скорее всего все нормально вызывается один раз. Откуда пример тестов взят? - ставлю на то, что бут с кемелом в этом плане интегрирован весьма фигово, и ничего на самом деле не мокается нормально.
...
Рейтинг: 0 / 0
03.03.2020, 19:12
    #39933706
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
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, тогда в тестах можно свои названия объявить.
...
Рейтинг: 0 / 0
03.03.2020, 19:20
    #39933708
SpringMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
Ну ТС определенно на @MockEndpoints("file:kgw") рассчитывает
...
Рейтинг: 0 / 0
04.03.2020, 11:44
    #39933973
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
SpringMan
Поставь лог в маршрут, скорее всего все нормально вызывается один раз. Откуда пример тестов взят? - ставлю на то, что бут с кемелом в этом плане интегрирован весьма фигово, и ничего на самом деле не мокается нормально.


тест взял
YouTube Video
...
Рейтинг: 0 / 0
10.03.2020, 15:03
    #39935968
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
[quot Андрей Панфилов#22091940]
kadet


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


Префикс "mock" в UnitTest в выражении
Код: java
1.
2.
@EndpointInject("mock:file:kgw")
	private MockEndpoint mock;


"сообщает" движку, что нужно "применить" mock к узлу (EndPoint) "file:kgw" и выполнить инъекцию в переменную "mock" типа "MockEndpoint".
...
Рейтинг: 0 / 0
10.03.2020, 15:13
    #39935975
kadet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Apache Camel and junit test
причина, по которой в этом простом приложении "сваливался" тест, заключалась в том, что аннотация "@Test" имела объявление
Код: java
1.
import org.junit.jupiter.api.Test;



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



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

PS:
капец просто, все мозги наизнанку вывернул. Так и не понял, почему с "jupiter" отказывается работать.
проект прицепил для желающих
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache Camel and junit test / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]