当前位置:网站首页>JUnit 5测试中的临时目录(附实例及代码)
JUnit 5测试中的临时目录(附实例及代码)
2022-07-30 19:33:00 【JAVAQXQ】
JUnit 4 TemporaryFolder @Rule 允许开发人员利用临时目录来创建测试。在JUnit 5中,不支持 @Rule s,因此测试文件和目录需要一点额外的工作。幸运的是,在JUnit 5.4中,有一个新的内置扩展来处理测试中的临时目录,而且它非常容易使用:
你还在用JUnit 4工作吗?请看我以前的文章: 在JUnit 4中用TemporaryFolder @Rule测试文件和目录 。
@TempDir
@org.junit.jupiter.api.io.TempDir 注解可以用来注解类字段或生命周期中的参数(例如: )或测试方法的类型 或 。一旦这样做了,临时目录就会被创建。一旦测试方法或类执行完毕,该目录及其在测试执行过程中创建的内容将被删除。 @BeforeEach File Path
要测试的代码
在这个简单的例子中,我们将测试 FileWriter 类,它有一个单一的方法将文本内容写入一个新文件:
public class FileWriter {
public void writeTo(String path, String content) throws IOException {
Path target = Paths.get(path);
if (Files.exists(target)) {
throw new IOException("file already exists");
}
Files.copy(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)), target);
}
}
复制代码@TempDir 作为测试方法的参数
在这个例子中,我们将用 @TempDir 注释来测试参数:
import org.junit.jupiter.api.io.TempDir;
@Test
void writesContentToFile(@TempDir Path tempDir) throws IOException {
// arrange
Path output = tempDir
.resolve("output.txt");
// act
fileWriter.writeTo(output.toString(), "test");
// assert
assertAll(
() -> assertTrue(Files.exists(output)),
() -> assertLinesMatch(List.of("test"), Files.readAllLines(output))
);
}
复制代码@TempDir 作为一个实例字段
import org.junit.jupiter.api.io.TempDir;
class FileWriterTest {
private FileWriter fileWriter = new FileWriter();
@TempDir
Path tempDir;
@BeforeEach
void beforeEach() {
assertTrue(Files.isDirectory(this.tempDir));
}
@RepeatedTest(3)
void throwsErrorWhenTargetFileExists() throws IOException {
// arrange
Path output = Files.createFile(
tempDir.resolve("output.txt")
);
// act & assert
IOException expectedException = assertThrows(IOException.class, () -> fileWriter.writeTo(output.toString(), "test"));
assertEquals("file already exists", expectedException.getMessage());
}
}
复制代码基于上述例子,我们可以看到,每次重复测试都会使用一个新的临时目录(根据标准测试类的生命周期),因此方法的安排部分执行起来没有任何错误。
共享 @TempDir
如果需要在测试方法之间共享一个临时目录,我们可以创建一个静态字段并重复使用临时目录,如下面的例子:
import org.junit.jupiter.api.io.TempDir;
class FileWriterTest {
private FileWriter fileWriter = new FileWriter();
@TempDir
static Path tempDir;
@BeforeAll
static void setUp() {
assertTrue(Files.isDirectory(tempDir));
}
@RepeatedTest(3)
void throwsErrorWhenTargetFileExists(RepetitionInfo repetitionInfo) throws IOException {
// arrange
Path output = Files.createFile(
tempDir.resolve(repetitionInfo.getCurrentRepetition() + "_output.txt")
);
// act & assert
IOException expectedException = assertThrows(IOException.class, () -> fileWriter.writeTo(output.toString(), "test"));
assertEquals("file already exists", expectedException.getMessage());
}
}
复制代码请注意,测试方法的安排部分在每次执行时创建唯一的文件名(使用当前的重复计数器),否则 FileAlreadyExistsException 。
总结
通过 @TempDir ,你可以在测试中轻松地处理临时目录。这里没有魔法:你注解 Path 或 File 对象,并在你需要时注入。其余的由JUnit为你处理。
在GitHub上找到这些例子 :https://github.com/kolorobot/junit5-samples/tree/master/junit5-built-in-extensions
参见
边栏推荐
- Start foreground Activity
- ImportError:attempted relative import with no known parent package
- MySQl数据库————DQL数据查询语言
- 【MindSpore】用coco2017训练Model_zoo上的 yolov4,迭代了两千多batch_size之后报错,大佬们帮忙看看。
- MindSpore:对image作normalize的目的是什么?
- What is a RESTful API?
- MySQL performance optimization (hardware, system configuration, table structure, SQL statements)
- redis
- 技术很牛逼,还需要“向上管理”吗?
- How do radio waves transmit information?
猜你喜欢

How to build FTP server under win2003

MindSpore:【JupyterLab】查看数据时报错

Perfectly Clear QuickDesk & QuickServer图像校正优化工具

MySQL大批量造数据

MindSpore:【Resolve node failed】解析节点失败的问题

iPhone真是十三香?两代产品完全对比,或许上一代更值得买

MySQL performance optimization (hardware, system configuration, table structure, SQL statements)

The technology is very powerful, do you still need to "manage up"?

MindSpore:【MindSpore1.1】Mindspore安装后验证出现cudaSetDevice failed错误

The advanced version of the cattle brushing series (search for rotating sorted arrays, inversion of the specified range in the linked list)
随机推荐
ResNet18-实现图像分类
MySQL分组后取最大一条数据【最优解】
Vulkan开启特征(feature)的正确姿势
golang日志库zerolog使用记录
Witness the magical awakening of the mini world in HUAWEI CLOUD
055 c# print
win2003下FTP服务器如何搭建
技术很牛逼,还需要“向上管理”吗?
【私人系列】日常PHP遇到的各种稀奇古怪的问题
MySQL six-pulse sword, SQL customs clearance summary
Brush questions record----string
浅聊对比学习(Contrastive Learning)第一弹
MySQL database - DQL data query language
DCM 中间件家族迎来新成员
Tensorflow2.0 confusion matrix does not match printing accuracy
部分分类网络性能对比
Linux下安装MySQL教程
MySQL分库分表
The advanced version of the Niu Ke brushing series (team competition, sorting subsequences, inverting strings, deleting common characters, repairing pastures)
How to copy table structure and table data in MySQL