内建扩展
重要性:★★☆☆☆
JUnit鼓励自行开发扩展库来增强JUnit的能力。JUnit本身也包含了一些内置的扩展,其中之一是临时目录扩展,它为单个测试方法或整个测试类中的所有测试方法在测试前创建一个临时目录并在测试后清除它。
要启用临时目录扩展,可以给测试类添加一个类型为java.nio.file.Path
或 java.io.File
的非private字段并注解为@TempDir
,或者给测试方法或生命周期方法添加一个类型为java.nio.file.Path
或 java.io.File
的参数并注解为@TempDir
。临时目录只支持字段注入和方法参数注入,不支持构造函数注入。
如果是通过实例字段注入临时目录,则会在每个测试方法执行后清除临时目录,并为下一个测试方法重新创建临时目录。如果是通过静态字段注入临时目录,则会一次性创建临时目录并由测试类中的所有测试方法共享这个目录,所有测试执行完毕才清除这个临时目录。
下面是代码示例:
package yang.yu.tdd.tempdir;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
class SharedTempDirectoryDemo {
@TempDir
static Path sharedTempDir;
@Test
void writeItemsToFile() throws IOException {
Path file = sharedTempDir.resolve("test.txt");
Files.write(file, Arrays.asList("a", "b", "c"));
assertThat(Files.readAllLines(file)).containsExactly("a", "b", "c");
}
@Test
void anotherTestThatUsesTheSameTempDir() {
// use sharedTempDir
}
}