我想要一個簡單的方法來爲我的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