使用Junit测试名称

命名测试

在创建Junit测试时,通常没有实际使用该方法的名称。 Junit运行程序使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称。 测试方法的名称用于文档目的。

人们遵循不同的风格。 您可以使用给定的given_Something_when_Something_then_Something样式命名测试,我也遵循了一段时间。 其他学校开始了与世界的方法的名称should来描述被测对象“应该”做的。 我真的不明白为什么这比用test开头方法的名称要好得多。 如果所有方法都以相同的前缀开头,那么这仅仅是噪声。 这些天来,我倾向于将这些方法命名为关于SUT功能的简单陈述。

如何访问测试名称?

从技术上讲,只要名称是唯一的,您就可以自由命名方法。 测试中通常不使用该名称,并且测试结果不应取决于测试方法的实际名称。 即使Junit支持一种访问方法名称的方法。

如果您有Junit规则

@Rule
public TestName name = new TestName();

您可以在测试中引用对象name ,获取实际方法的名称为

String testName = name.getMethodName();

我们可以用它做什么?

有时,被测单元会创建一些巨大的结构,可以序列化为二进制或文本文件。 通常的做法是运行一次测试,检查结果文件,如果可以,则将其保存以供以后比较。 以后的测试执行将实际结果与开发人员保存并检查的结果进行比较。

在集成测试的情况下,如果对外部系统进行打桩,并且可以从某些本地测试数据文件中获取其响应,而不用查询外部服务,则可以使用类似的方案。

在这种情况下,可以使用测试名称来创建存储测试数据的文件名。 测试的名称是唯一的,可以轻松地将数据与需要它的测试配对。 我在jscglib库中使用了这种方法。 该库提供了流利的API来创建Java源代码。 测试包含一些Java Builder模式导向器代码,然后将生成的源代码保存到文件中或与已存储的结果进行比较。

要保存文件,使用了aux方法getTargetFileName

private String getTargetFileName() {String testName = name.getMethodName();String fileName = "target/resources/" + testName + ".java";return fileName;}

要获取资源名称,使用了getResourceName方法:

private String getResourceName() {String testName = name.getMethodName();return testName + ".java";}

之后,加载和保存生成的Java代码变得轻而易举:

private void saveGeneratedProgram(String actual) throws IOException {File file = new File(getTargetFileName());file.getParentFile().mkdirs();FileOutputStream fos = new FileOutputStream(file);byte[] buf = actual.getBytes("utf-8");fos.write(buf, 0, buf.length);fos.close();}private String loadJavaSource() {try {String fileName = getResourceName();InputStream is = this.getClass().getResourceAsStream(fileName);byte[] buf = new byte[3000];int len = is.read(buf);is.close();return new String(buf, 0, len, "utf-8");} catch (Exception ie) {return null;}}

通常,这是我知道的唯一示例,您可以将测试方法的名称用于除文档之外的其他名称。

您不应该使用的名称

用我的语言说:“每个人都擅长某事。 至少表明失败。” 下面的示例演示了这种失败。

我已经看到了将测试数据编码为测试方法名称的代码。 访问测试方法名称的方式也很奇怪。 程序员可能不知道有一种支持方法的方法。 缺乏知识可能阻止了他或她行恶,但这个人是个天才。 测试的测试方法是调用帮助程序类的静态方法。 该静态方法引发异常,它也捕获了该异常,并查看了堆栈跟踪以识别调用方方法的名称。

在访问了该名称之后,该代码应用了正则表达式以从方法名称中提取值。

摘要

我不知道Junit开发人员打算给我们类TestName 。 可能有一些用例需要该功能。 我确信他们没有提供功能,因为有可能这样做。 如果您不知道所提供的API有什么用处,则可能不应该仅仅因为可以就提供它。 新手程序员会错误地使用它而不是好的。

另一方面,如果您在API中看到可以使用的内容,则并不意味着您应该使用该功能。 您应该更好地了解功能的目的,并相应地使用它。

编写单元测试比命名它们更重要。 只要没有单元测试,关于单元测试的命名的辩论就没有用。

根据需要编写单元测试,但不能更多。

翻译自: https://www.javacodegeeks.com/2015/05/using-junit-test-name.html

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

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

相关文章

java 门面模式_Java门面模式

一、简介隐藏系统的复杂性,对外提供统一的访问入口,外部系统访问只通过此暴露出的统一接口访问。是一种结构型模式。封装子系统接口的复杂性,提供统一的对外接口,能够使子系统更加简单的被使用。二、结构及使用场景如上所示&#…

摘成功道路上容易被忽视的5项技能

本文摘自《电子工程师专辑》,来源:http://forum.eet-cn.com/FORUM_POST_10008_1200257568_0.HTM。 人人都渴望成功,在通往成功的道路上,少不了技能和运气,运气往往难以受人控制,技能却能好好把握&#xff0…

selenium java测试_java+selenium 自动化测试

在项目上使用自动化测试,是为了跑主流程的回归测试,提高测试效率,在每个测试版本中把主要的精力放在发版内容新增的需求中;根据项目的功能模块,把业务主流程和使用频率高的功能抽取出来进行自动化测试,作为…

通用名称

泛型类型参数名称通常包含一个大写字母字符。 如果您开始阅读有关泛型的官方ORACLE文档&#xff0c;则第一个示例是 /*** Generic version of the Box class.* param <T> the type of the value being boxed*/ public class Box<T> {// T stands for "Type&q…

扩大缩小Linux物理分区大小

由于产品在不同的标段&#xff0c;设备硬盘也不同&#xff0c; 有些500G&#xff0c;有些320G有些200G&#xff0c;开始在大硬盘上做的配置&#xff0c;想把自己定制好的Linux克隆到小硬盘上&#xff0c;再生龙会纠结空间大小的问题&#xff0c; 因此需要做一些分区的改变。 网…

java 文件上传 servlet_java文件上传-原始的Servlet方式

前言&#xff1a;干了这几个项目&#xff0c;也做过几次文件上传下载&#xff0c;要么是copy项目以前的代码&#xff0c;要么是百度的&#xff0c;虽然做出来了&#xff0c;但学习一下原理弄透彻还是很有必要的。刚出去转了一圈看周围有没有租房的&#xff0c;在北京出去找房子…

内存泄漏 和 内存溢出

在计算机科学中&#xff0c;内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失&#xff0c;而是应用程序分配某段内存后&#xff0c;由于设计错误&#xff0c;失去了对该段内存的控制&#xff0c;因而造成了内…

不要被泛型和向后兼容性所愚弄。 使用泛型类型

最近&#xff0c;我与jOOQ的早期客户Ergon的 Sebastian Gruber进行了非常有趣的讨论&#xff0c;我们与之保持了密切联系。 与Sebastian交谈使我们的工程团队得出结论&#xff0c;认为我们应该完全重写jOOQ API。 现在&#xff0c;我们已经有很多用于各种用途的泛型&#xff0c…

java 什么是耦合_什么是耦合、解耦

什么是耦合、解耦一、耦合1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。2、在软件工程中&#xff0c;对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高&#xff0c;维护成本越高&#xff0c;因此对象的设计应使类和构…

基于SharePoint 的企业信息平台架构

转载于:https://www.cnblogs.com/jackljf/p/3589224.html

java bufferarray_Java中的ByteBuffer array()方法

可以使用array()类java.nio.ByteBuffer中的方法获得缓冲区的字节数组。如果返回的数组被修改&#xff0c;则缓冲区的内容也会被类似地修改&#xff0c;反之亦然。如果缓冲区是只读的&#xff0c;则抛出ReadOnlyBufferException。演示此的程序如下所示-示例import java.nio.*;im…

java freemarker 分页_10小时入门java开发04 springboot+freemarker+bootstrap快速实现分页功能...

本节是建立在上节的基础上&#xff0c;上一节给大家讲了管理后台表格如何展示数据&#xff0c;但是当我们的数据比较多的时候我们就需要做分页处理了。这一节给大家讲解如何实现表格数据的分页显示。准备工作还是老规矩&#xff0c;看效果图可以看出我们实现了如下功能1&#x…

获取linux服务器基本信息脚本

为了方便日常运维写的一段简单脚本&#xff0c;用于集中获取服务器操作系统、CPU、内存使用、负载、硬盘使用、网络信息。 脚本比较简单&#xff0c;就不解释了&#xff0c;有兴趣的朋友请自行查看。 #!/bin/bash##Name:system_info#Ver:1.0#Author:lykyl###程序说明:#获取服务…

您认为有关垃圾收集的7件事-完全错了

关于Java垃圾收集的最大误解是什么&#xff0c;它的真实情况如何&#xff1f; 小时候&#xff0c;我的父母曾经告诉我&#xff0c;如果我学习不好&#xff0c;我将成为垃圾收集者。 他们所知道的很少&#xff0c;垃圾回收实际上很棒。 也许这就是为什么即使在Java世界中&#…

java $p_javap -c命令详解

一直在学习Java,碰到了很多问题&#xff0c;碰到了很多关于i和i的难题&#xff0c;以及最经典的String str "abc" 共创建了几个对象的疑难杂症。 知道有一日知道了java的反汇编 命令 javap。现将学习记录做一小结&#xff0c;以供自己以后翻看。如果有错误的地方&a…

hibernate 映射四多对一双向映射

学生和班级的例子来说&#xff0c;多个学生可以对应一个班级。 1.站在学生角度来说&#xff0c;学生就是多端。那么我们可以通过多对一来维护2者的关系。 2.站在班级的角度来说&#xff0c;班级就是一端。那么我们可以通过一对多啦维护2者的关系。 3.我们也可以双向关联两者的关…

JS factory

http://my.oschina.net/jbryan/blog/140647转载于:https://www.cnblogs.com/zhongqiu/p/3472472.html

django mysql 表单_Python Django 表单提交数据到mysql并展示

首先1&#xff1a; 新建项目userproject&#xff0c; 新建应用childName2&#xff1a; 这是childName文件目录&#xff0c;templates文件夹放insert.html 与 show.html3&#xff1a; insert.html 与 show.html/**insert.html**/用户登录12345678910111213141516Title信息展示用…

java h5 上拉加载更多_移动端H5页面上拉加载更多功能实现(二)

之前已经写过一篇关于上拉加载更多的文章&#xff0c;那个主要是根据滚动实现分页向后台发起请求实现。这次实现方式为后台返回所有需要加载的数据&#xff0c;前端这边做视觉上的分页效果。实现原理也是根据滚动距离触发加载更多的条件。我这边的需求是需要在模态框里实现一个…

体验最火的敏捷——SCRUM(厦门,2014.1.4)

1.概述SCRUM是当前最火的一种敏捷开发方法&#xff0c;有用户故事、冲刺、燃尽图等很多很酷的玩法&#xff0c;有牛B的产品负责人、SCRUM Master&#xff0c;有超强的自组织团队。本沙龙将为您展现当前最火最酷的敏捷开发方法&#xff01;内容大纲&#xff1a;1)SCRUM是神马东西…