差異處
這裏顯示兩個版本的差異處。
java:junit4:rules:temporaryfolder [2020/05/02 22:49] tony |
java:junit4:rules:temporaryfolder [2023/06/25 09:48] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | {{tag>junit4 junit4_rules}} | ||
- | ====== JUnit4 : TemporaryFolder Rule ====== | ||
- | ===== Problem ===== | ||
- | 撰寫測試免不了會需要產生暫存檔案或資料夾,而在測試結束時,我們往往會透過@After或@AfterClass去刪除這些檔案: | ||
- | <code java> | ||
- | 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(); | ||
- | } | ||
- | |||
- | } | ||
- | </code> | ||
- | 但會產生很多測試檔案,又或者是在測試中間才會產生測試檔案,這都會讓你的teardown變得麻煩。本篇文章要分享JUnit4的TemporaryFolder,讓你可以不需要在member宣告一堆檔案變數與控制其生命週期,就可以把這些暫存資料砍光光。 | ||
- | ===== How to? ===== | ||
- | 寫法相當簡單,只要在member宣告一個TemporaryFolder的@Rule變數,接著在測試中直接用這變數來產生檔案或資料夾即可: | ||
- | <code java> | ||
- | 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()); | ||
- | } | ||
- | } | ||
- | </code> | ||
- | 透過我的範例程式碼,可以發現預設情況下會將檔案產生到java.io.tmpdir變數中所對應的位置。在debug的時候,我不希望把這些檔案砍掉,那我該怎麼做? override delete method,讓它不做動作就好: | ||
- | <code java> | ||
- | @Rule | ||
- | public TemporaryFolder temporaryFolder = new TemporaryFolder() { | ||
- | public void delete() { | ||
- | |||
- | } | ||
- | }; | ||
- | </code> | ||