如何在扩展中使用 TempDir

How to use TempDir in Extensions

我正在使用支持内置@TempDir 的 JUnit 5.4.0。

我正在尝试编写一个扩展程序,通过复制一些模板文件在每次测试之前重置 tempdir。

但是,临时目录似乎未初始化。 @TempDir 标签好像没有运行。我不确定我是否做错了,但请告诉我如何解决这个问题。

这个问题只发生在扩展中。如果我把所有东西都放在 MainTest.java 中就不会发生,但整个目的是为了可重用性——我想重用这个可以用内容重置自身的 tempdir。

DirectoryResetExtension.java

public class DirectoryResetExtension implements BeforeEachCallback {

    private Path TEST_DATA_FOLDER;

    @TempDir
    public Path tempDir;

    public static DirectoryResetExtension initializeWith(Path folder) {
        return new DirectoryResetExtension(folder);
    }

    @Override
    public void beforeEach(ExtensionContext extensionContext) throws IOException {
        System.out.println(tempDir); // Gives null!
    }
}

MainTest.java

public class MainTest {
    @RegisterExtension
    public static DirectoryResetExtension tempDir = DirectoryResetExtension.initializeWith(TEST_DATA_FOLDER);

    @Test
    public void easyTest() {
        ...
    }
}

预期:tempDir 不为空。 System.out.printlnDirectoryResetExtension 中的(tempDir) 打印有效路径。

实际:tempDir 为空。

我在 Gitter 上回复了你。所以我只是复制粘贴到这里。

@TempDir 在扩展中不受支持。它仅在测试 classes.

中受支持

无论如何,应该不需要重置临时目录。

临时目录在当前 "scope" 之后被删除。范围取决于您声明 @TempDir.

的位置

如果您想将内容复制到临时目录中,您通常会在测试 class.

中的 @BeforeAll@BeforeEach 方法中执行此操作

如果您确实需要在扩展中访问 JUnit 管理的临时目录,您可以open a GitHub issue讨论可能性。