Как лучше всего проверить, доступна ли внешняя система перед выполнением тестов?
Мы используем JUnit для выполнения интеграционных тестов, а также тестов системной интеграции, которые основаны на внешних тестовых системах (не обязательно поддерживаемых нашей собственной компанией).
Интересно, где разместить код, который проверяет, доступна ли система перед запуском тестовых случаев? Таким образом, я могу определить, есть ли сеть или другая проблема, а не одна с самим тестом.
JUnit позволяет настроить некоторые части теста в JUnit-Rules. Является ли хорошей идеей настроить службу, которая взаимодействует с внешней системой в рамках правила, и выполнить некоторые базовые проверки ("ping") для внешней системы в рамках правила? Или для сохранения состояния и в рамках теста используйте предположения JUnit (rule.isAvailable), чтобы избежать выполнения теста?
Или было бы разумнее поместить этот проверочный код в пользовательский JUnit Runner?
Или есть даже другой способ сделать это? (просто создать несколько утилит?)
Цель состоит в том, чтобы пропустить тесты, если некоторые условия не выполнены, поскольку очевидно, что тесты не пройдут. Я знаю, что это указывает на плохую обработку исключений, но есть много устаревшего кода, который я не могу изменить вообще.
Я пытался найти некоторые статьи сам, но кажется, что поисковые термины ("тест", "внешняя система" и т. Д.) Немного неблагодарны.
Спасибо!
2 ответа
Рассмотреть возможность использования org.junit.Assume.*
как описано здесь. Когда предположения не выполняются, ваши тесты по умолчанию игнорируются. Вы можете написать собственного бегуна, который будет делать что-то еще, когда ваши предположения не пройдут.
Ключевым моментом, однако, является то, что тесты не дают сбоя, когда допущения, такие как доступность ваших внешних сервисов, терпят неудачу.
Если ping применяется к каждому тесту в классе, я бы поместил вызов ping в метод @Before. @Before будет выполняться перед каждым тестовым методом (т. Е. @JUnit -аннотированные методы).
Если ping не применяется ко всем тестам в классе, вам придется явно нажимать ping из этих методов.