问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Scala + JUnit 怎么使用 Rule

发布网友 发布时间:2022-05-01 02:32

我来回答

1个回答

热心网友 时间:2022-06-23 19:48

伴随JUnit中 TemporaryFolder @Rule 的出现,测试文件和目录变得简单了。
在 JUnit 中,规则(@Rule)可作为构造测试用具(fixture)时初始化方法和清理方法的替代和补充(在 JUnit 中,这2种方法分别通过以下注解标注:org.junit.Before、org.junit.After、org.junit.BeforeClass 和 org.junit.AfterClass) 。而且规则的功能更加强大并且也更易于在项目和类之间共享。
译者注:测试用具是指作为测试运行基准的一组对象所呈现的一个稳定状态。其目的是确保测试是运行在一个众所周知的、稳定的环境中的,以实现测试的可重复执行。准备输入数据、生成模拟对象(Mock)、将特定的数据加载到数据库、复制一组特定的文件等,这些都属于构造测试用具。
待测试的代码

1234567

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);}

测试类

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

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

译者注:第35行的 assertThat() 是类 org.assertj.core.api.Assertions 中的静态方法。
TemporaryFolder 提供了2个方法 newFile 和 newFolder,分别用于管理文件和目录。这2个方法都可以返回所需要的对象。返回的文件或目录都是由 setup 方法创建的并被存放在临时目录中。要想获取临时目录自身的路径,可以使用 TemporaryFolder 的 getRoot 方法。
无论测试成功与否,任何在测试过程中添加到临时目录的文件或目录都会在测试结束时删除。
本示例可以从我在 GitHub 上的项目 unit-testing-demo 中找到,除此之外该项目中还有很多其他示例可供诸位参考。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
豆瓣酱放多了怎么补救 鑫创sssbd量产工具 为了了解某校1500名学生的体质状况,随机调查了这个学校内一定数量学生... 564÷85的竖式如何列? 上海房屋过户 要准备什么资料 个人卖房要提供哪些资料 房屋交易资料需要哪些 房子买卖要哪些资料 房产交易需要什么资料 ...让重锤自由下落,打出的一条纸带如图所示,图中 scala中spilt切割问题 如何用scala语言分解质因数? scala中匿名函数作为参数的问题 scala main函数 args 怎么写 scala中class和object的区别 scala怎样实现一个自定义的类 scala class和object,trait的区别 如何处理Scala未来中抛出的异常 初学scala,我希望大神解答 如何在Scala中使用条件表达式 为什么scala不能接收元组作为函数参数 scala 里映射和元组的区别 scala之函数是个什么鬼 scala的unit是什么意思? 外观是个手机里面是个相机图标是啥软件? 彩色相机是什么软件 这是什么相机软件? iphone有个照相机图标的交友软件叫什么 图标是相机的软件叫什么 水印可爱的你是什么相机 照片左下角有水印可爱的你 是什么相机软件啊? 苹果11电池寿命83算几成新 苹果手机电池效率只有83是什么意思 苹果手机83电池续航一般用了多久 HP P1007打印机怎么加墨粉,位置在哪里? p1007硒鼓如何加墨粉 有什么好看的美女拼图 苹果x11个月电池掉到83正常吗? 复兴西路57号甲是属于湖南路街道吗? 惠普打印机p1007墨粉怎么加 求推荐一款孩子益智教育拼图 湖南省邵东县到河北省唐山走高速有多远 苹果8手机电池容量83%要不要换电池? 上海闵行到湖南长沙走江西方向多少公里 陕西省神木县到湖南省长沙怎么走 唐山到湖南怎么走最快最省时间 汉阳有什么好吃的东西?具体在哪里? 水瓶座天性自由,不受拘束,能陪水瓶座一辈子到老的星座有哪些? 能爱水瓶女一辈子的星座 哪一个星座可以对水瓶座非常宠爱、疼爱? 在十二星座里哪些星座能够很好的守护水瓶座?