1

我在我的测试中使用 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 的基本需求,但是……我正在调整现有代码,我突然对此感到困惑。

4

1 回答 1

3

由于FooTest为每个测试方法创建了一个新实例(不确定 JUnit 是否总是如此,但我认为在典型情况下至少是这样),你FileSystem将为每个测试获得一个新实例,除非你做那个领域static。因此,无需删除您在测试后创建的文件。但是,您可能想要做的是close()每次FileSystem测试之后。这会立即将其从打开文件系统的地图中删除,从而使其被垃圾收集。(这不是绝对必要的,因为文件系统存储在那里的弱引用中,但我认为无论如何它是可取的。)

于 2015-11-07T02:25:50.310 回答