На уровне Middleware можно создавать интеграционные тесты, которые выполняются в полнофункциональном контейнере Spring с подключением к базе данных. В тестах такого типа можно выполнять код любого слоя внутри Middleware - от сервисов до ORM.
Для того, чтобы выполнять тесты из IDE, создайте каталог test
в модуле core рядом с src
. После этого пересоздайте проектные файлы IDE.
Платформа содержит класс TestContainer
, который может быть использован в качестве базового для тестовых контейнеров приложения. Создайте наследника этого класса в каталоге test
модуля core и в его конструкторе переопределите параметры загрузки компонентов и свойств приложения, а также параметры подключения к тестовой БД. Например:
link:../../../../source/development/testing_3.java[role=include]
Пример собственного файлв test-app.properties
:
link:../../../../source/development/testing_11.properties[role=include]
В качестве базы данных рекомендуется использовать отдельную тестовую БД, которую можно создавать, например, следующей задачей в build.gradle
:
link:../../../../source/development/testing_4.java[role=include]
Тестовый контейнер используется в классах тестов в качестве JUnit rule, указанного с помощью аннотации @ClassRule
:
link:../../../../source/development/testing_5.java[role=include]
В данном примере тестовый контейнер инициализируется один раз для всех тестовых методов класса, и уничтожается после того, как все они выполнены.
Так как запуск контейнера занимает некоторое время, имеет смысл инициализировать контейнер один раз для тестов из нескольких (или всех) классов. Для этого создайте общий синглтон-экземпляр тестового контейнера, например:
link:../../../../source/development/testing_6.java[role=include]
И используйте его в тестовых классах:
link:../../../../source/development/testing_7.java[role=include]
- Полезные методы тестового контейнера
-
Класс
TestContainer
содержит следующие методы, которые можно использовать в коде тестов (см. примерCustomerLoadTest
выше):-
persistence()
- возвращает ссылку на интерфейс Persistence. -
metadata()
- возвращает ссылку на интерфейс Metadata. -
deleteRecord()
- этот набор перегруженных методов предназначен для использования в@After
методах для удаления тестовых объектов из БД.
-
- Логирование
-
Класс
TestContainer
настраивает логирование в соответствие с файломtest-logback.xml
, предоставляемым платформой. Данный файл содержится в артефактеcuba-core-tests
.Для того, чтобы настроить уровни логирования в своих тестах, необходимо выполнить следующее:
-
Скопируйте файл
test-logback.xml
из артефакта платформы в корень каталогаtest
модуляcore
проекта, например какmy-test-logback.xml
. -
Сконфигурируйте параметры логирования в
my-test-logback.xml
. -
Добавьте блок статической инициализации в класс тестового контейнера проекта и укажите местоположение файла конфигурации Logback в системном свойстве
logback.configurationFile
:link:../../../../source/development/testing_9.java[role=include]
-
- Дополнительные хранилища
-
Если в вашем проекте используются дополнительные хранилища, необходимо создать соответствующие источники данных JDBC в тестовом контейнере. Например, если у вас есть хранилище
mydb
, являющееся базой данных PostgreSQL, добавьте следующий метод в класс тестового контейнера:link:../../../../source/development/testing_10.java[role=include]
Кроме того, если тип дополнительной базы данных отличается от основной, необходимо добавить ее драйвер как
testRuntime
зависимость модуляcore
вbuild.gradle
, например:link:../../../../source/development/testing_12.groovy[role=include]