当前位置:网站首页>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
参见
边栏推荐
- 【MindSpore1.2.0-rc1产品】num_workers问题
- MySQL数据库————视图和索引
- Download Win11 how to change the default path?Download Win11 change the default path method
- 跨进程启动后台服务
- Start background services across processes
- The 17th "Revitalization Cup" National Youth Vocational Skills Competition - Computer Programmers (Cloud Computing Platform and Operation and Maintenance) Participation Review and Summary
- Vulkan开启特征(feature)的正确姿势
- The technology is very powerful, do you still need to "manage up"?
- Difference between Object and Map
- ResNet18-实现图像分类
猜你喜欢
Download and installation of the latest version of MySQL 8.0 under Linux (detailed steps)
[PyTorchVideo Tutorial 01] Quickly implement video action recognition
Talking about Contrastive Learning (Contrastive Learning) the first bullet
数据库索引:索引并不是万能药
MySQL database - DQL data query language
MindSpore:【模型训练】【mindinsight】timeline的时间和实际用时相差很远
MySQL eight-part text recitation version
Linux下安装Mysql5.7,超详细完整教程,以及云mysql连接
Frog jumping steps (recursive and non-recursive) ------- Xiaolele walks the steps
MySQL sub-database sub-table
随机推荐
Encapsulates a console file selector based on inquirer
Linux下载安装mysql5.7版本教程最全详解
Linux download and install mysql5.7 version tutorial the most complete and detailed explanation
Google's AlphaFold claims to have predicted almost every protein structure on Earth
[Private Series] All kinds of strange problems encountered in daily PHP
跨域问题的解决方法
启动前台Activity
What is a RESTful API?
ImportError:attempted relative import with no known parent package
How to install and use PostgreSQL 14.4
SimpleOSS third-party library libcurl and engine libcurl error solution
Cesium loads offline maps and offline terrain
MindSpore:【模型训练】【mindinsight】timeline的时间和实际用时相差很远
SimpleOSS第三方库libcurl与引擎libcurl错误解决方法
055 c# print
MindSpore:【JupyterLab】查看数据时报错
Install MySQL tutorial under Linux
VBA batch import Excel data into Access database
刷题记录----字符串
Database Tuning - Database Tuning