Problem
雖然寫的是java程式,但並非所有功能都能夠跨平台執行;又或者測試僅針對某一種平台或情形等,而會有條件的去決定是否執行測試案例。
How to?
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足以達到我的需求。
留言
張貼留言