Мне бы хотелось, чтобы простой способ присвоить значение приоритета моим тестам JUnit, чтобы я мог сказать «запустить только тесты с приоритетом 1», «выполнить приоритет 1, 2 и 3 теста» и т. Д. Я знаю, что могу просто включить строка, такая как Assume.assumeTrue("Test skipped for priority " + priority, priority <= 2);
в начале каждого теста (где priority
- это тесты с приоритетом с наивысшим значением, которые я хочу запустить, и 2
- это значение приоритета для данного конкретного теста), однако копирование в строку в начале каждого теста не выполняется кажется очень хорошим решением.Как я могу автоматически пропустить некоторые тесты JUnit на основе условия?
Я пытался писать решение, используя простую аннотацию, которая обнаруживается с помощью JUnit Правила Я использую все равно:
public class Tests {
@Rule
public TestRules rules = new TestRules();
@Test
@Priority(2)
public void test1() {
// perform test
}
}
public class TestRules extends TestWatcher {
private int priority = 1; // this value is manually changed to set the priority of tests to run
@Override
protected void starting(Description desc) {
Priority testCasePriority = desc.getAnnotation(Priority.class);
Assume.assumeTrue("Test skipped for priotity " + priority, testCasePriority == null || testCasePriority.value() <= priority);
}
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Priority {
public int value() default 0;
}
В то время как это, кажется, работает (правильные тесты показаны как пропускаются в JUnit Затмения) все еще выполняются тесты, то есть все еще выполняется код test1()
.
Кто-нибудь есть идеи, как я могу получить Assume
в своем правиле, чтобы фактически пропустить тест?
Это может помочь: - http://stackoverflow.com/questions/1689242/conditionally-ignoring-tests-in-junit-4 –
... или это может помочь: http://www.codeaffine.com/2013/11/18/a-junit-rule-to-condition-ignore-tests/ – SiKing