跳到主要內容

發表文章

目前顯示的是有「JUnit4」標籤的文章

JUnit4 - Conditionally ignore tests

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 . ou...

JUnit4 : TemporaryFolder Rule

Problem 撰寫測試免不了會需要產生暫存檔案或資料夾,而在測試結束時,我們往往會透過@After或@AfterClass去刪除這些檔案: public class TestTemporaryFolder { private File testFile = new File ( "./test" ) ;   @After public void teardown ( ) { testFile. delete ( ) ; }   @Test public void test ( ) { // do test with testFile testFile. mkdir ( ) ; }   } 但會產生很多測試檔案,又或者是在測試中間才會產生測試檔案,這都會讓你的teardown變得麻煩。本篇文章要分享JUnit4的TemporaryFolder,讓你可以不需要在member宣告一堆檔案變數與控制其生命週期,就可以把這些暫存資料砍光光。 How to? 寫法相當簡單,只要在member宣告一個TemporaryFolder的@Rule變數,接著在測試中直接用這變數來產生檔案或資料夾即可: public class TestTemporaryFolder {   @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder ( ) ;   @Test public void useTemporaryFolder ( ) throws Exception { System . out . println ( temporaryFolder. newFolder ( "test" ) . getAbsolutePath ( ) ) ; System . out . println ( temporaryFolder. newFolder ( "test.txt" ) . getAbsolutePath ( ) ) ; } } 透過我的範例程式碼,可以發現預設情況下會將檔案產生到java.io.tmpdir變數...