Я не думаю, что есть лучший способ сделать это, то, что вам нужно проверить, часто субъективно и зависит от контекста.
Однако вы можете структурировать свой код таким образом, чтобы наиболее важные из них были легко протестированы, а то, что осталось (интеграция), можно сделать позже / с помощью различных инструментов.
Я предлагаю следовать принципам гексагональной архитектуры . Идея состоит в том, чтобы держать в центре вашего приложения и без каких-либо зависимостей (импорт ...) к любой среде ( jaxrs , jpa и т. Д.) Все бизнес-правила. Эти правила могут быть легко разработаны с помощью TDD. Тогда у вас будут очень короткие тесты. Может потребоваться использовать Mockito для имитации реализации интерфейсов SPI.
Во второй раз вы можете использовать это «ядро», подключая адаптеры к внешнему миру (HTTP, базы данных, AMQP и т. Д.), Используя API и реализуя интерфейсы SPI.
Если вы хотите протестировать эти адаптеры, вы выходите из области действия unit-tests и пишете интеграционные тесты . Интеграция с фреймворком, протоколом, чем угодно.
В такого рода тестах могут использоваться самые разнообразные инструменты: от макета, связанного с фреймворком (например, тестовая структура Джерси ), база данных в памяти (например, H2 ) до полнофункционального промежуточного программного обеспечения. Например, используя такие инструменты, как testcontainers .
При написании интеграционных тестов важно помнить, что они медленны в отношении юнит-тестов. Чтобы сделать обратную связь максимально короткой, вам нужно ограничить количество интеграционных тестов до минимума.
Надеюсь, это поможет вам!