Вы определенно проводите интеграционный тест. Это вполне выполнимо в JUnit, но вам всегда нужно знать, что именно вы тестируете, и что вы можете тестировать.
Во-первых, вам нужно знать, кто контролирует удаленный сервис. Если это ты, отлично. Если это не ты, будь осторожен.
Предположим, что удаленный сервис не находится под вашим контролем. Вы отправляете запрос в удаленный сервис, он обрабатывает его и отправляет запрос в локальную базу данных. Таким образом, вы не можете влиять на то, сколько времени это займет, или как данные будут записаны в локальную базу данных, или какое преобразование данных будет иметь место.
Итак, все, что вы можете проверить, - это то, что некоторые отправляемые вами данные окажутся в базе данных через некоторое время. Итак, чтобы проверить, что что-то происходит, все, что вам нужно сделать, это проверить, что соответствующая строка находится в базе данных. Это может быть просто SELECT COUNT(*) WHERE ...
[*]
Если удаленная система стабильна, не часто меняется, то вы можете проверить больше деталей строк в локальной базе данных, но помните, что
- вам придется обновлять тест каждый раз при смене удаленного сервиса,
- каждый раз, когда изменяется версия удаленной службы, вы должны добавлять логику в свои тесты.
Помните, что место для тестирования сложной логики приложения в удаленном сервисе находится в коде удаленного сервиса. Не твой код.
Еще одна вещь, которую нужно учитывать:
Когда кто-то тестирует чужой код, все может измениться без предупреждения, тесты могут провалиться без предупреждения из-за ошибок в их коде, неработающего сервера интеграции и неработающей базы данных. Если возможно, установите код на машине, которой вы управляете, это минимизирует количество проблем такого типа, которые у вас возникнут. Другая альтернатива - иметь отдельный проект.
специально для этих тестов, поэтому, по крайней мере, ваши сборки будут работать, если эти тесты не пройдут.
Если у вас есть контроль над удаленным сервисом, отлично. Поместите свои сложные логические тесты в тесты для этой службы, и все, что вам нужно в локальном приложении, это проверить, возвращаются ли некоторые данные, тест на петлю.
Что касается самого теста, то, вероятно, будет достаточно простого вызова удаленной службы и затем цикла, который проверяет наличие данных каждые 5 секунд или около того. С таймаутом конечно. В JUnit нет ничего конкретного для цикла, но посмотрите на Timeout @Rule для Timeout.
[*] Наряду с соответствующими ошибочными условиями, конечно.