junit 测试目录_JUnit 5测试中的临时目录

junit 测试目录

JUnit 4 TemporaryFolder @Rule允许开发人员使用临时目录创建测试。 使用JUnit 5时,不支持@Rule因此测试文件和目录需要一点点额外的工作。 幸运的是,有了JUnit 5.4,有一个新的内置扩展可以处理测试中的临时目录。 而且它非常易于使用。

您还在使用JUnit 4吗? 请参阅我以前的有关使用TemporaryFolder @Rule在JUnit 4中测试文件和目录的文章。

@TempDir

可以使用@org.junit.jupiter.api.io.TempDir注释来注释类字段或生命周期中的参数(例如@BeforeEach )或FilePath类型的测试方法。 完成此操作后,将创建临时目录。 一旦测试方法或类执行完毕,将删除在测试执行过程中创建的目录及其内容。

要测试的代码

在这个简单的示例中,我们将测试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); }  } 

@TemDir作为测试方法参数

在此示例中,我们将使用@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()); }  } 

根据上面的示例,我们可以看到每次重复测试都使用一个新的临时目录(根据标准测试类生命周期),因此该方法的ranging部分执行无误。

共享的临时目录

如果需要在测试方法之间共享一个临时目录,我们可以创建一个静态字段并重复使用该临时目录,如以下示例所示:

 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会在每次执行时(使用当前的重复计数器)创建唯一的文件名,否则会抛出FileAlreadyExistsException

摘要

使用@TempDir您可以轻松地在测试中使用临时目录。 这里没有魔术:您可以注释PathFile对象并根据需要进行注入。 其余的工作由JUnit替您完成。

在我的GitHub存储库中找到示例: https : //github.com/kolorobot/junit5-samples/tree/master/junit5-built-in-extensions

翻译自: https://www.javacodegeeks.com/2019/03/temporary-directories-junit-5-tests.html

junit 测试目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA内置Maven的settings.xml文件在哪里?

IDEA 内置的 Maven 没有 settings.xml 文件,如果你自己不安装 Maven,而你又想设置 Maven 的资源仓库,你要怎么做呢? 参见:https://blog.csdn.net/Li_Ya_Fei/article/details/104432073

java生成唯一有序序列号_分布式唯一 ID 之 Snowflake 算法

SegmentFault 社区专栏:全栈修仙之路作者:semlinkerNo.1Snowflake 简介1.1 什么是 SnowflakeSnowflake is a service used to generate unique IDs for objects within Twitter (Tweets, Direct Messages, Users, Collections, Lists etc.). These IDs a…

冀教版五年级计算机教学计划,冀教版五年级上册教学计划资料

现状分析:五年级两个班现有学生四十余人,基本为我校四年级直升学生.已学习了北师大版《语文》五年级上册和冀教版《语文》五年级下册.目前普遍情况是听、写的能力尚可,读和说的能力有待提高.一班学生基础知识较为扎实,但缺乏变通性,学习较为用功,但成绩不佳;二班学生…

spring缓存_有关Spring缓存性能的更多信息

spring缓存这是我们最后一篇关于Spring的缓存抽象的文章的后续文章 。 作为工程师,您可以通过了解所使用的某些工具的内部知识来获得宝贵的经验。 了解工具的行为有助于您在做出设计选择时变得更加成熟。 在本文中,我们描述了基准测试实验和结果&#x…

提交构件到Maven的远程中央仓

参见:https://central.sonatype.org/publish/publish-guide/

ctrl导致开机弹出计算机,Win7系统开机黑屏提示Press Ctrl+Alt+Del to restart如何解决...

在使用win7系统的时候,难免会遇到各种各样的问题,比如最近有雨林木风win7旗舰版系统用户反映说开机黑屏,并提示Press CtrlAltDelto restart,该怎么解决这样的问题呢,现在给大家分享一下Win7系统开机黑屏提示PressCtrlA…

rxjava背压怎样使用_使用MicroProfile应用隔板和背压

rxjava背压怎样使用我录制了一段视频,介绍如何使用MicroProfile Fault Tolerance实现隔板和背压。 隔板后面的想法是将应用程序分成几个隔离功能的执行单元。 在企业Java应用程序中,这通常意味着定义多个线程池。 向客户端施加背压会导致向客户端添加有…

单片机蜂鸣器编程音乐_基于单片机的智能鱼缸温控系统设计

曹益豪聊城大学东昌学院机电工程系山东 聊城 252000摘 要:为满足热带鱼的饲养要求,设计了一种基于AT89C52单片机的小型智能温控鱼缸系统。该系统利用DS18B20传感器检测水温,并通过测量温度与设定温度的对比控制加热装置的通断。现详细介绍了…

计算机快捷键 还原默认值,CAD默认快捷键如何恢复?教你还原CAD默认配置的方法...

小编告诉大家AutoCAD的操作命令和各种设置分为默认和自定义。 可以根据每个人的喜好进行设置。 不必完全遵循该软件的默认操作,只是因为此快捷键是可变的,所以我仍然不习惯更改我的个人操作,并且想要恢复为默认设置,我们如何还原它…

java开发指南_Java 12新功能完整指南

java开发指南六个月飞得如此之快,是时候再次仔细研究一下即将发布的新JDK版本。 让我们满足Java 12及其向开发人员介绍的功能。 自Oracle推出加速六个月的发布节奏以来已经有一段时间了,要跟上每个版本及其添加到表中的功能越来越难了。 从好的方面来看…

python语句join_Python中的join()函数的用法

函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 os.path.join():将多个路径组合后返…

怎么升级计算机内存容量,如何升级电脑内存?给电脑内存升级的操作步骤

电脑内存是用来作为临时存储数据设备使用的,如果内存占用率高,会让电脑运行负荷。喜欢玩游戏的人对电脑内存要求都比较高。很多玩家在购机时内存选择并不大,一般都是标配8G及以下,那么如何升级电脑内存?下面就和大家一…

搜索Maven依赖资源/搜索Maven工件/搜索Maven构件/搜索依赖/搜索构件/搜索工件/下载依赖/依赖下载

文章目录依赖索引索引文件更新存放在本地的远程仓库的资源索引以及本地仓库的资源索引macOS 下索引文件的路径在 pom.xml 页面内按快捷键 ⌘N 搜索构件在资源库管理中,创建资源库时,选择 From Maven 来搜索构件通过 Maven 构件资源网站搜索依赖索引 如果…

在Selenium中按TagName定位元素

Selenium定位器是处理网页上的元素时的关键。 从ID,名称,类,标记名,XPath,CSS选择器等定位器列表中,可以根据需要选择其中任何一种,然后在网页上找到Web元素。 由于与tagName或linktext相比&…

python open读取_python,一读取文件open()

在实际操作中,我们经常会读取文件,这个时候python为我们提供了一个open()的方法,供我们读取文件,通过help(open),我们可以获取open的方法 f.close()关闭读取 f.read(size-1)读取文件size个字符,但未给size赋…

笔记本计算机风扇声音大怎么办,笔记本电脑噪音大怎么办 全解决方法

笔记本电脑在使用一段时间后,或多或少会产生令人厌烦的噪音。其中大的噪音多数来源于笔记本散热风扇。那么,笔记本电脑噪音大怎么办呢?下面我们来看具体解决方法吧。一、电脑噪音大怎么办之风扇原因在不少人看来,散热和噪音是一对不可调和的…

Maven的resources插件配置详解(含过滤器的配置详解)

文章目录指定配置文件所在的目录使用 excludes 元素可以排除指定的配置文件使用 includes 元素可以指定要处理的文件处理测试资源过滤器配置resources 插件,负责将配置文件复制到编译目录中。Maven Java Web 项目默认的编译目录 target/classes。两种配置文件 src/…

latex如何使节标题居左_为使节构建控制平面的指南第3部分-特定于域的配置API...

latex如何使节标题居左这是探索为Envoy Proxy构建控制平面的系列文章的第3部分。 在本博客系列中,我们将研究以下领域: 采用一种机制来动态更新Envoy的路由,服务发现和其他配置 确定哪些组件构成了控制平面,包括后备存储&#…