這是本文件的舊版!


JUnit4 : TemporaryFolder Rule

撰寫測試免不了會需要產生暫存檔案或資料夾,而在測試結束時,我們往往會透過@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宣告一堆檔案變數與控制其生命週期,就可以把這些暫存資料砍光光。

寫法相當簡單,只要在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() {
 
	}
};