【问题标题】:How to use TempDir in Extensions如何在扩展中使用 TempDir
【发布时间】:2019-02-12 10:10:42
【问题描述】:

我正在使用支持内置 @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 不为空。 DirectoryResetExtension 中的 System.out.println(tempDir) 打印有效路径。

实际:tempDir 为空。

【问题讨论】:

    标签: junit junit5


    【解决方案1】:

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

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

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

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

    如果您想将内容复制到临时目录中,您通常会在测试类中的 @BeforeAll@BeforeEach 方法中执行此操作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 2017-04-10
      • 2010-10-04
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多