使用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
使用Junit测试名称相关推荐
- junit5_使用Junit测试名称
junit5 命名测试 创建Junit测试时,通常没有方法名称的实际使用. Junit运行程序使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称. 测试方法的名称用于文档目 ...
- junit测试类叫什么名字_使用Junit测试名称
junit测试类叫什么名字 命名测试 当我们创建Junit测试时,通常没有方法名称的实际使用. Junit运行器使用反射来发现测试方法,并且从版本4开始,您不再被限制以test开始方法的名称. 测试方 ...
- junit测试设置不回滚_正确设置JUnit测试名称
junit测试设置不回滚 寻找好名字是手工软件的挑战之一. 您需要随时随地找到它们-类,方法,变量,仅举几例. 但是,什么使名字成为好名字呢? 引用Oncle Bob的话:"三件事:可读性, ...
- 正确设置JUnit测试名称
寻找好名字是手工软件的挑战之一. 您需要随时随地找到它们-类,方法,变量,仅举几例. 但是,什么使名字成为好名字呢? 引用Oncle Bob的话:"三件事:可读性,可读性和可读性!" ...
- 使用ant进行junit测试
(绿色部分为转) 一.关于Junit 关于为什么junit.jar包不能放到lib/ext目录中: 先谈谈类装载器 java虚拟机和程序都调用ClassLoader类的loadClass的方法来加载. ...
- Maven找不到要运行的JUnit测试
我有一个Maven程序,它可以正常编译. 当我运行mvn test它不会运行任何测试(在TESTs标头下显示There are no tests to run. ). 我已经用一个非常简单的设置重新创 ...
- 浅谈Junit测试中反射和Jmock的应用
最近由于项目的需要,开发后的代码强制编写Junit测试,并且达到一定的coverage probility(主要应付客户).所以,为了达到一定的覆盖率,鄙人不得不在Case中大量使用反射(一般是针对p ...
- junit 测试执行顺序_JUnit 5中的测试执行顺序
junit 测试执行顺序 一般实践认为,自动化测试应能够独立运行且无特定顺序,并且测试结果不应依赖于先前测试的结果. 但是在某些情况下,可以证明特定的测试执行顺序是正确的,尤其是在集成或端到端测试中. ...
- junit测试起名字规则_如何在JUnit 5中替换规则
junit测试起名字规则 最近发布的JUnit 5(又名JUnit Lambda) alpha发行版引起了我的兴趣,在浏览文档时,我注意到规则以及运行程序和类规则都消失了. 根据文档,这些部分竞争的概 ...
最新文章
- Bootstrap 基本模板
- linux学习--shell重定向
- LeetCode H-Index II(二分法)
- 为什么网易在2016年大举进军云计算?
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Cities(区间dp)
- 软件公司管理基本原则
- mysql5.6 memcached_MySQL 5.6 安装配置InnoDB memcached Plugin
- 工程师已经被虐到不行不行的了
- cdt规约报文用程序解析_用 Python 撸一个 Web 服务器第3章:使用 MVC 构建程序
- ipython 更好的交互环境
- 动态规划实战篇--斐波那契数列
- 记一次windows系统主引导修复
- 谈谈如何做到从未来看向当代的能源技术
- 几十个精选壁纸网站,配色网站,字体网站
- 凸优化理论(一)数学优化问题的分类
- phpcms修改了配置文件之后出现Warning: date() expects parameter 2 to be long..错误
- android倒计时器
- C++ 控制台创建窗口,加载png图片,实现悬浮窗
- easyui表格自动换行
- 编程乐趣:获取12306的所有车站电报码
热门文章
- 《金色梦乡》金句摘抄(一)
- React中构造函数、reader和函数的调用次数和时机测试
- C++实现字符串的拼接
- win10硬盘修复工具使用教程
- springmvc新建拦截器
- spring react_使用Spring WebFlux构建React性REST API –第1部分
- 需求调研 现有系统梳理_对速度的需求,访问现有数据的速度提高了1000倍
- facelets_Java EE 8中的MVC 1.0:使用Facelets入门
- oracle idm_批准Oracle IDM中的特定Web服务
- openshift_OpenShift上的Java EE工作流(技术提示#64)