我想要一个简单的方法来为我的JUnit测试分配一个优先级值,以便我可以说'只运行优先级1测试','运行优先级1,2和3测试'等。我知道我可以包含在每次测试开始时(例如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;
}
虽然这似乎工作(正确的测试显示为在Eclipse的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-conditionally-ignore-tests/ – SiKing