多亏了TemporaryFolder @Rule在JUnit中使用文件和目录进行测试很容易。

在JUnit中,规则( @Rule )可以替代或设置夹具设置和清除方法( org.junit.Beforeorg.junit.Afterorg.junit.BeforeClassorg.junit.AfterClass ),但是它们功能更强大,并且可以更轻松地在项目和类之间共享。

要测试的代码

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("UTF8")), target);
}

上面的方法可以将给定的String内容写入不存在的文件。 有两种情况可以测试。

考试

public class FileWriterTest {private FileWriter fileWriter = new FileWriter();@Rulepublic TemporaryFolder temporaryFolder = new TemporaryFolder();@Rulepublic ExpectedException thrown = ExpectedException.none();@Testpublic void throwsErrorWhenTargetFileExists() throws IOException {// arrangeFile output = temporaryFolder.newFile("output.txt");thrown.expect(IOException.class);thrown.expectMessage("file already exists");// actfileWriter.writeTo(output.getPath(), "test");}@Testpublic void writesContentToFile() throws IOException {// arrangeFile output = temporaryFolder.newFolder("reports").toPath().resolve("output.txt").toFile();// actfileWriter.writeTo(output.getPath(), "test");// assertassertThat(output).hasContent("test").hasExtension("txt").hasParent(resolvePath("reports"));}private String resolvePath(String folder) {return temporaryFolder.getRoot().toPath().resolve(folder).toString();}
}

TemporaryFolder规则提供了两种方法来管理文件和目录: newFilenewFolder 。 两种方法都在setup方法中创建的临时文件夹下返回所需的对象。 如果需要临时文件夹本身的路径,则可以使用TemporaryFolder getRoot方法。

无论测试成功与否,在测试完成时将添加到temp文件夹中的所有内容都会自动删除。

这个例子可以在我在GitHub上的unit-testing-demo项目中找到,还有许多其他例子。

翻译自: https://www.javacodegeeks.com/2015/01/testing-with-files-and-directories-in-junit-with-rule.html

使用@Rule在JUnit中测试文件和目录相关推荐

  1. junit rule_使用@Rule在JUnit中测试文件和目录

    junit rule 多亏了TemporaryFolder @Rule在JUnit中使用文件和目录进行测试很容易. 在JUnit中,规则( @Rule )可以用作夹具设置和清除方法( org.juni ...

  2. JUnit中测试异常抛出的方法

    最近在做TWU关于TDD的作业,对JUnit中测试异常抛出的方法进行了一些学习和思考. 在进行单元测试的时候有的时候需要测试某一方法是否抛出了正确的异常.例如,我有一个方法,里面对一个List进行读取 ...

  3. 在JUnit中测试预期的异常

    单元测试用于验证一段代码是否按照开发人员的预期运行. 有时,这意味着检查代码是否也会引发预期的异常. JUnit是Java单元测试的标准,并提供了几种验证抛出异常的机制. 本文探讨了这些选项及其相对优 ...

  4. junit5_在JUnit中测试预期的异常

    junit5 单元测试用于验证一段代码是否按照开发人员的预期运行. 有时,这意味着检查代码是否也会引发预期的异常. JUnit是Java单元测试的标准,并提供了几种验证抛出异常的机制. 本文探讨了这些 ...

  5. python显示目录中的文件_Python中的文件和目录操作实现

    Python中的文件和目录操作实现 对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数.重要的是,这 ...

  6. linux防止文件被复制,技术|如何在 Linux 系统中防止文件和目录被意外的删除或修改...

    有时,我会不小心的按下 SHIFT+DELETE来删除我的文件数据.是的,我是个笨蛋,没有再次确认下我实际准备要删除的东西.而且我太笨或者说太懒,没有备份我的文件数据.结果呢?数据丢失了!在一瞬间就丢 ...

  7. java 如何级联删除_Java学习-040-级联删除目录中的文件、目录

    之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到 ...

  8. object-c中管理文件和目录:NSFileManager使用方法

    object-c中管理文件和目录:NSFileManager使用方法 对于NSFileManager,文件或目录是使用文件的路径名唯一标识的.每一个路径名都是一个NSString对象,它可以是相对路径 ...

  9. python操作目录_详解python中的文件与目录操作

    详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...

最新文章

  1. Android OpenGL ES(十一)绘制一个20面体 .
  2. Category Archives: Linux
  3. 荣获中国音视频产业大会「科技创新奖」,网易云信彰显行业领先水平
  4. T-SQL备忘(6):常用内置函数
  5. E-triples II_2019牛客暑期多校训练营(第四场)
  6. 反质数问题,求不大于n的最大反质数
  7. python3 上传文件到目标机器_Python3 +服务器搭建私人云盘,再也不怕限速了
  8. 使用HTML5的语义标签
  9. flash文本呈现html啥意思,显示flash内容时用的OBJECT和EMBED标签区别介绍
  10. jQuery实现清空table表格除首行外的所有数据
  11. 图形验证码实现(代码)
  12. 虚拟服务器软件 海光,海光校园虚拟服务器管理软件技术参数
  13. 怎样去掉gif动图水印?在线编辑gif图片技巧
  14. 抓住那头牛(宽搜bfs)
  15. STM32debug模式下可以执行,但是不能单步调试和跳转
  16. java switch是什么意思_java switch语句详解
  17. 丙腈PEG丙腈, CN-PEG-C
  18. 小程序 formid 生成_微信电子计次卡生成小程序
  19. python太极代码_Python : Turtle绘图-太极图(代码)
  20. ACM-ICPC 2018 焦作赛区网络预赛A. Magic Mirror(签到题)

热门文章

  1. hibernate注解实体类(Dept.java)
  2. 2019蓝桥杯省赛---java---B---4(数的分解)
  3. window7连接其他计算机的打印机,win7系统电脑怎样连接其它电脑上在打印机?
  4. 前端wxml取后台js变量值_这些鲜为人知的前端冷知识,你都GET了吗?
  5. 转】Eclipse编辑Spring配置文件xml时自动提示类class包名
  6. thinking-in-java(13) String字符串
  7. 本地方法(JNI)——从java 程序中调用C函数
  8. java \t怎么从头开始_通过这些简单的步骤从头开始学习Java
  9. java记录目录树_Java记录
  10. gradle跟pom_Gradle多项目构建–父pom式结构