где лучше всего проверить, доступна ли внешняя система перед выполнением тестов?

Мы используем JUnit для выполнения интеграционных тестов, а также системных интеграционных тестов, которые полагаются на внешние тестовые системы (не обязательно поддерживаемые нашей собственной компанией).

Интересно, куда поместить код, который проверяет, доступна ли система перед запуском тестов? Таким образом, я могу определить, есть ли проблема с сетью или другой проблемой, а не с самим тестом.

JUnit позволяет настроить некоторые части теста в JUnit-Rules. Это хорошая идея настроить службу, которая взаимодействует с внешней системой в рамках правила, и выполнять некоторые базовые проверки («пинг») внешней системы в рамках правила? Или для сохранения состояния и в тесте используйте JUnit accept(rule.isAvailable), чтобы избежать выполнения теста?

Или было бы разумнее поместить этот проверочный код в собственный JUnit Runner?

Или есть еще один способ сделать это? (просто создать несколько утилит?)

Цель состоит в том, чтобы пропустить тесты, если некоторые условия не выполняются, поскольку очевидно, что тесты не пройдут. Я знаю, что это указывает на плохую обработку исключений, но есть много устаревшего кода, который я не могу полностью изменить.

Я пытался найти некоторые статьи самостоятельно, но поисковые запросы ("тест", "внешняя система" и т. д.) выглядят немного неблагодарными.

Благодарность!


person wemu    schedule 13.01.2014    source источник
comment
Правильный подход — это хорошо.   -  person Stefan Birkner    schedule 14.01.2014


Ответы (2)


Попробуйте использовать org.junit.Assume.*, как описано здесь. Когда предположения терпят неудачу, ваши тесты по умолчанию игнорируются. Вы можете написать собственный бегун, чтобы делать что-то еще, когда ваши предположения не срабатывают.

Главное, однако, заключается в том, что тесты не дают сбоев, когда такие предположения, как доступность внешних служб, не срабатывают.

person Vidya    schedule 13.01.2014
comment
Благодарность! предположим, что я также нашел несколько связанных тем: stackoverflow.com/questions/19358444/ и stackoverflow.com/questions/1689242/ - person wemu; 14.01.2014
comment
Рад помочь. Удачи с вашим проектом! - person Vidya; 14.01.2014

Если проверка связи применяется к каждому отдельному тесту в классе, я бы поместил вызов проверки связи в метод @Before. @Before будет выполняться перед каждым отдельным тестовым методом (т. е. @JUnit-аннотированными методами).

Если ping не применяется ко всем тестам в классе, вам придется явно нажать ping из этих методов.

person Vladimir Shtokman    schedule 13.01.2014