Conditionally ignore tests

雖然寫的是java程式,但並非所有功能都能夠跨平台執行;又或者測試僅針對某一種平台或情形等,而會有條件的去決定是否執行測試案例。

Ignore Annotation

最簡單的無條件式的忽略是使用@Ignore,通常用於debug或有原因的不想執行才會用上:

@Ignore
public void test() {
	// ... skip to run
}

Assume Class

最簡單的條件式忽略,可以在@Before宣告的方法中,宣告你要限制的條件。以這例子而言,只有在Windows上執行測試,才會真正的執行:

@Before
public void setup() {
	Assume.assumeTrue(Platform.isWindows());
	// ... skip to run
}


以這種情況來說,放在@BeforeClass宣告的方法中,會更為洽當,僅會執行一次而不會每個@Test都執行:
@BeforeClass
public static void classSetup(){
	Assume.assumeTrue(Platform.isLinux());
	// ... skip to run
}

如果每個@Test有個別條件,可以將Assume放在@Test宣告的方法中:
@Test
public void testNetShareGetInfo() {
	Assume.assumeTrue(Platform.isWindows());
	// ... skip to run
}

JUnit-Ext (不成功)

我另外試了JUnit-Ext這個API,範例如下:

class RunOnWinows implements Checker {
	@Override
	public boolean satisfy() {
		return Platform.isWindows();
	}
}
 
@RunIf(RunOnWinows.class)
@Test
public void test() {
	System.out.println("run test");
}
結果是失敗的,我沒繼續往下追原因,畢竟目前透過Assume足以達到我的需求。