2015-11-06 43 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

相关问题