2013-09-06 2 views
6

При написании кода, который взаимодействует с внешними ресурсами (например, с использованием веб-службы или другой сетевой операции), я часто структурирую классы, чтобы их также можно «обрезать» с помощью файла или какой-либо другой способ ввода. Таким образом, я в конечном итоге использую окутанную реализацию для тестирования других частей системы, а затем один или два теста, которые специально проверяют вызов веб-службы.Исключить некоторые тесты JUnit из автоматизированного набора тестов

Проблема в том, что я не хочу обращаться к этим внешним сервисам от Jenkins или когда я запускаю все тесты для моего проекта (например, «тест градиента»). Некоторые из услуг имеют побочные эффекты или могут быть недоступны для всех разработчиков.

Сейчас я просто раскомментирую, а затем повторно прокомментирую аннотацию @Test по этим конкретным методам тестирования, чтобы включить и отключить их. Включите его, запустите его вручную, чтобы проверить его, а затем забудьте прокомментировать его снова.

// Uncomment to test external service manually 
//@Test 
public void testSomethingExternal() { 

Есть ли лучший способ сделать это?

EDIT: Для ручного модульного тестирования я использую Eclipse и могу просто щелкнуть правой кнопкой мыши по методу тестирования и выполнить Run As -> JUnit test. Но это не работает без (без комментариев) аннотации.

+0

Неясно, хотите ли вы автоматизированный «профиль» модульных тестов, которые вы можете переключаться между ними или просто более простым способом вручную переключать их во время разработки. – chrylis

+0

@chrylis То, что я пытался сделать изначально, это запустить индивидуальный тест. Однако идея создания отдельного профиля для этих типов тестов, вероятно, является лучшим подходом. Хотя мне все же хотелось бы иметь возможность запускать некоторые тесты отдельно (в тех случаях, когда есть побочные эффекты, например, которые я стараюсь избегать, но иногда это неизбежно). –

ответ

2

Насколько я вижу, вы используете gradle, и API для JUnit говорит, что аннотация @Ignore отключает тест. Я добавлю задачу градиента, которая добавит @Ignore для этих тестов.

3

Если вы просто хотите отключить тесты для функциональности, которая еще не была написана, или иначе вручную отключить некоторые тесты временно, вы можете использовать @Ignore; тесты будут пропущены, но все еще отмечены в отчете.

Если вы хотите что-то вроде Spring Profiles, где вы можете определить набор правил, для которых тесты запускаются, вы должны либо разделить свои тесты на отдельные тестовые примеры, либо использовать Filter.

+0

Интересно. См. Мое редактирование выше - возможно, я могу создать фильтр, который обнаруживает, когда я запускаю один тест в Eclipse и (un) фильтрует этот метод тестирования соответствующим образом. (Не думал, что это похоже на весенние профили, но да, это очень похоже.) –

6

Я рекомендую использовать категории junit. Смотрите этот блог для деталей: https://community.oracle.com/blogs/johnsmart/2010/04/25/grouping-tests-using-junit-categories-0.

В принципе, вы можете аннотировать некоторые тесты как находящиеся в специальной категории, а затем вы можете настроить два набора тестов: один, который запускает тесты этой категории, и те, которые игнорируют тесты в этой категории (но все работает)

@Category(IntegrationTests.class) 
public class AccountIntegrationTest { 

    @Test 
    public void thisTestWillTakeSomeTime() { 
    ... 
    } 

    @Test 
    public void thisTestWillTakeEvenLonger() { 
    .... 
    } 

}

вы даже можете аннотировать отдельные тесты»

public class AccountTest { 

    @Test 
    @Category(IntegrationTests.class) 
    public void thisTestWillTakeSomeTime() { 
    ... 
    } 

в любое время я вижу что-то вручную получать включение или выключение I C Ринге.

+0

Спасибо - это звучит неплохо. Не уверен, как это взаимодействует с Gradle или Eclipse, придется проверить это дальше. –

+0

отлично работает в затмении. вы все еще делаете то же самое Run As -> Junit – dkatzel

Смежные вопросы