您可以使用 JUnit
5 用户指南的 §2.20.1 中描述的@TempDir注释 (JUnit 5.4+)。从用户指南(强调我的):
内置扩展用于为单个测试或测试类中的所有测试创建和清理临时目录。默认情况下,该目录是注册的。要使用它,请对非私有字段进行批注,或者将类型参数或注释为生命周期方法或测试方法添加参数。TempDirectory
java.nio.file.Path
java.io.File
@TempDir
java.nio.file.Path
java.io.File
@TempDir
注意:此扩展是在 5.4
版中添加的,目前(自 5.8.2
起)处于实验阶段。
使用实例字段的示例:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File
class SomeTests {
@TempDir
Path directory; // may be private since 5.8
}
– 允许@TempDir字段为私有 #2687
使用测试方法参数的示例:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File
class SomeTests {
@Test
void testFoo(@TempDir Path directory) {
// do test...
}
}
注意:不支持构造函数参数。
创建和删除目录时,@TempDir
的 Javadoc 中进行了描述(JUnit 5.8.2 中的文档引用):
创造
仅当测试类中的字段或生命周期方法或测试方法中的参数用 注释时,才会创建临时目录。如果字段类型或参数类型既不是,也不是,或者无法创建临时目录,则将根据需要抛出 an 或 a。此外,将为带有 注释的构造函数参数抛出 一个。@TempDir
Path
File
ExtensionConfigurationException
ParameterResolutionException
ParameterResolutionException
@TempDir
范围
默认情况下,将为批注的每个声明创建一个单独的临时目录。如果要在测试类中的所有测试之间共享临时目录,则应在字段或方法的参数上声明批注。@TempDir
static
@BeforeAll
旧行为
通过将配置参数设置为 ,可以恢复到使用单个临时目录的旧行为。在这种情况下,临时目录的作用域取决于执行测试类时遇到第一个批注的位置。当批注出现在字段或方法的参数上时,类中的所有测试都将共享临时目录。否则,例如,当 仅用于实例字段或 test 中的参数或方法时,每个测试都将使用自己的临时目录。junit.jupiter.tempdir.scope
per_context
@TempDir
static
@BeforeAll
@TempDir
@BeforeEach
@AfterEach
删除
当到达临时目录的作用域结束时,即当测试方法或类完成执行时,JUnit 将尝试递归删除临时目录中的所有文件和目录,最后删除临时目录本身。如果删除文件或目录失败,将引发 一个,这将导致测试或测试类失败。IOException