2015-11-06 50 views
1

我使用Jimfs在我的測試是這樣的:每次測試後,我是否必須清理我的Jimfs文件系統?

public class FooTest { 
    private FileSystem fs = Jimfs.newFileSystem(Configuration.unix()); 
    private List<Path> paths = new ArrayList<>(); 
    private Path getPath(String first, String... more) { 
    Path path = fs.getPath(first, more); 
    paths.add(path); 
    return path; 
    } 
    @After public void cleanPaths() { 
    for (Path path: paths) { 
     Files.walkFileTree(path, FileVisitors.DELETE); 
    } 
    } 
    @Test public void bar() { 
    Path baz = getPath("baz"); 
    // test using baz 
    } 
} 

現在,我們知道,Jimfs是在內存中。我真的需要清理我創建的路徑嗎?或者我可以刪除@After方法(及其相關機制)?

我清楚地認爲這是創建jimfs的基本需求,但是......我正在修改現有的代碼,我突然對此感到困惑。

回答

2

由於每個測試方法創建的FooTest一個新實例(不知道這是總是真正使用JUnit,但我認爲它至少真實的典型案例),你會得到一個每個測試的新FileSystem以及除非你使該字段static。因此,刪除測試後創建的文件是不必要的。但是,您可能想要做的是在每次測試後close()FileSystem。這會立即將其從開放文件系統的地圖中刪除,從而使其被垃圾收集。 (這不是必須的,因爲文件系統存儲在一個弱引用中,但我認爲它最好是無論如何。)

+0

感謝關閉()提示,它真的很好地知道,因爲Junit保持默認的整個運行測試實例的強引用。關於Junit本身,每個測試方法都有一個實例存在疑問,因爲它完全由所使用的Runner定義,即使每個測試都默認使用一個實例。 –

+0

是的,所以你可能想用'@ Before'和'@ After'創建/關閉你的'FileSystem',這樣你就可以正確地爲JUnit做所有事情。在某些時候,我可以爲Jimfs創建一個JUnit規則,爲您做到這一點。 – ColinD

相關問題