2016-09-12 2 views
1

У меня есть тестовый класс, содержащий тестовые примеры для синих и несиновых устройств. Если параметр isBlue установлен, тогда он должен запускать только те тестовые примеры, которые говорят аннотацию @Blue. Я не уверен, как реализовать эту конкретную аннотацию, которая позволит достичь этой функциональности.Запуск специального модульного теста в соответствии с условием

public class TestClass { 

    boolean isBlue = false; 

    @Before 
    public void setUp() { 
     isBlue = MyApplication.instance().isBlue(); 
    } 

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

    @Test @Blue 
    public void testB() { ... } 
} 

В этом примере, если isBlue является true, то он должен работать только testB() в противном случае он должен выполнить все тестовые случаи

+0

Я не использовал их, но это может быть вариант использования для JUnit [категории] (https: // GitHub. ком/JUnit-команда/junit4/вики/категории). Вы также можете просто решить это с наследованием. –

+2

Несмотря на некоторые подходы, которые могут быть полезны здесь, я думаю, что ваш тест должен быть разделен на два - тест для синих устройств и тест на несиновые устройства. И вы, вероятно, должны запускать использование объектов Mock, с помощью которых вы могли бы моделировать поведение/свойства ваших объектов (например, «MyApplication») –

ответ

0

Посмотрите на JUnit бегунов. Nice explanation of runners

Вы можете создать свой собственный бегун, который будет распространяться на BlockJUnit4ClassRunner.

Вы можете переопределить

@Override 
    protected List<FrameworkMethod> getChildren() { 
    // scan test class for methonds annotated with @Test 
    } 

Чтобы дополнительно отфильтровать с помощью методов, которые имеют свой набор пользовательских аннотаций, и ваше имущество в заявке устанавливается также.

0

Я думаю, что вы на неправильном пути.

Вы хотите, чтобы ваши тестовые примеры помогали выявлять проблемы; и помочь вам в фиксации их. Все, что «отвлекает» вас от этой цели, уменьшает значения ваших модульных тестов.

Таким образом: не ставьте тесты, которые имеют действительно «разный» объем, в один и тот же класс тестов. Особенно с точки зрения: как бы вы могли контролировать, что «MyApplication.instance()» вернется? Это звучит как проблема сама по себе.

Смысл: вы хотите иметь два независимых теста; и они не полагаются на какой-то «статический» объект, рассказывающий им что-то. Они проверяют, что находится в их объеме; ничего больше.

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