Самое простое решение - разделить ваши тесты на два набора: интеграционные тесты и чисто модульные тесты. Затем разработайте сценарий или другие автоматизированные средства, чтобы определить, работает ли сервер, и просто пропустите комплект интеграционных тестов, если сервер не работает. Но если по какой-то причине группировать тесты по таким комплектам непрактично, вот альтернатива:
Вы можете создать пользовательский Runner , который пропускает тесты, если сервер недоступен. Вы можете либо запрограммировать бегуна, чтобы он самостоятельно определял доступность сервера, либо определить его через некоторый внешний процесс, такой как сценарий, который выполняется до фазы тестирования и устанавливает системное свойство в JVM, которое бегун может проверить (например, передать -Dcom.company.testrun.integration=false
аргумент командной строки).
Вы можете включить свой пользовательский бегун, используя аннотацию @RunWith
в ваших интеграционных тестовых классах, и использовать встроенный бегун для всех других тестов, чтобы на них не влияли. В качестве альтернативы вы можете использовать своего бегуна для всех тестов и придумать новую аннотацию (например, @IntegrationTest
), которую вы используете для украшения ваших методов интеграционных тестов. Используя последний подход, бегун применяет свою логику пропуска, только если сервер недоступен и метод теста имеет специальную аннотацию.