Как лучше всего выполнять модульные тесты конечных точек в Quarkus?
У меня есть некоторые сомнения относительно наилучшего подхода к выполнению модульных тестов в Quarkus.
Один из вариантов - использовать макеты, но у меня такое ощущение, что с их помощью я просто "осчастливлю" плагины для тестового покрытия, но на самом деле я ничего не тестирую с таким подходом.
Другой вариант - использовать настоящую базу данных, такую как встроенная база данных H2, но для этого мне нужно упорядочить модульный тест (Insert, Get, Update, Delete), иногда мне понадобится вставленный идентификатор из другого теста для выполнения операция удаления, например. Есть несколько сложных объектов, которые сложно вставить или удалить. Таким образом, при таком подходе я потеряю понятие модульного теста, потому что потеряю взаимозависимость тестов.
Есть ли у кого-нибудь предложения по этому сценарию? Дополнительная информация: я использую liquidbase, panache entity, junity.
1 ответ
Похоже, вы ищете интеграционные тесты. Я бы, наверное, выбрал следующие варианты:
- В зависимости от типа базы данных вы можете использовать h2 в памяти или использовать https://www.testcontainers.org/ для внешних служб.
- Имейте тестовые сценарии запуска для sql для общих данных, вставляйте данные напрямую для небольших тестовых случаев.
- Используйте такие инструменты, как http://rest-assured.io/ (обычно включенные в первоначальную настройку) для выполнения реальных вызовов API
Если вам действительно нужны модульные тесты, в этом случае в 90% случаев вам не нужно иметь базу данных для тестирования функциональности. Из-за разделения у вас, вероятно, есть контроллеры (ресурсы) отдельно от служб. Итак, в случае модульных тестов я бы, вероятно, пошел с:
- Как указано выше, логика отделена от сетевого уровня, так что любая обработка запросов и упаковка вывода для удовлетворения клиентов находится за пределами логического уровня. Если возможно, разделите логику на более мелкие части, это избавит вас от основной заботы о сложных данных.
- Для любых зависимых зависимостей либо переопределите их с помощью тестовых компонентов, либо имитируйте их с помощью Mockito. Это особенно важно для постоянства, вам нужно имитировать или подделывать любое соединение с базой данных, вам не нужно тестировать эту часть, потому что обычно она обрабатывается библиотеками.
- Вы можете читать объекты JSON из файлов для действительно сложных объектов
- Если вам действительно нужно проявить настойчивость, обратите внимание на самый первый пункт этого ответа.
Поэтому кажется, что вы хотите проверить, правильно ли ваш сервис выполняет свою работу на более высоком уровне, что может не быть модульным тестом, надеюсь, ответ поможет