我是否必须在每次测试后清理我的 Jimfs 文件系统?
Do I have to clean my Jimfs FileSystem after each test?
我在这样的测试中使用 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 的基本需求,但是......我正在调整现有代码,我突然对此感到困惑。
由于为每个测试方法创建了一个新的 FooTest
实例(不确定这是否 always 对于 JUnit 是正确的,但我认为它至少是正确的典型情况下),你也会为每个测试获得一个新的 FileSystem
,除非你创建该字段 static
。因此,没有必要删除您在测试后创建的文件。不过,您可能想要做的是在每次测试后 close()
FileSystem
。这会立即将其从打开的文件系统映射中删除,从而使其能够被垃圾收集。 (这不是绝对必要的,因为文件系统存储在那里的弱引用中,但我认为无论如何它都是可取的。)
我在这样的测试中使用 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 的基本需求,但是......我正在调整现有代码,我突然对此感到困惑。
由于为每个测试方法创建了一个新的 FooTest
实例(不确定这是否 always 对于 JUnit 是正确的,但我认为它至少是正确的典型情况下),你也会为每个测试获得一个新的 FileSystem
,除非你创建该字段 static
。因此,没有必要删除您在测试后创建的文件。不过,您可能想要做的是在每次测试后 close()
FileSystem
。这会立即将其从打开的文件系统映射中删除,从而使其能够被垃圾收集。 (这不是绝对必要的,因为文件系统存储在那里的弱引用中,但我认为无论如何它都是可取的。)