我正在使用支持内置@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为空。
答案 0 :(得分:1)
我在Gitter上回答了您。所以我将其复制粘贴在这里。
扩展程序不支持 @TempDir
。仅测试类支持。
在任何情况下,都不需要重置临时目录。
在当前“作用域”之后,将删除临时目录。范围取决于您声明@TempDir
的位置。
如果要将内容复制到temp目录中,通常可以在测试类的@BeforeAll
或@BeforeEach
方法中进行。
如果您实际上需要访问扩展内的JUnit管理的临时目录,则可以open a GitHub issue讨论可能性。