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變數中所對應的位置。在debug的時候,我不希望把這些檔案砍掉,那我該怎麼做? override delete method,讓它不做動作就好:
@Rule public TemporaryFolder temporaryFolder = new TemporaryFolder() { public void delete() { } };
另外從這篇文章看到,預設的TemporaryFolder規則無法確保百分之百刪除掉測試資料,如果你要確保這件事情且你的版本已4.13,可以使用TemporaryFolder的builder開啟assureDeletione功能。
留言
張貼留言