如何在扩展程序中使用TempDir

时间:2019-02-12 10:10:43

标签: junit junit5

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

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

但是,临时目录似乎未初始化。 @TempDir标记似乎没有运行。我不确定我是否做错了,但是请让我知道如何解决此问题。

此问题仅在扩展程序中发生。如果将所有内容都放入MainTest.java中并不会发生,但是整个目的是为了可重用性-我想重用这个可以用内容重置自身的临时目录。

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不为null。 DirectoryResetExtension中的System.out.println(tempDir)打印有效路径。

实际:tempDir为空。

1 个答案:

答案 0 :(得分:1)

我在Gitter上回答了您。所以我将其复制粘贴在这里。

扩展程序不支持

@TempDir。仅测试类支持。

在任何情况下,都不需要重置临时目录。

在当前“作用域”之后,将删除临时目录。范围取决于您声明@TempDir的位置。

如果要将内容复制到temp目录中,通常可以在测试类的@BeforeAll@BeforeEach方法中进行。

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