单元测试 问题描述_单元测试技巧:创建描述性测试

单元测试 问题描述

您的单元测试应尽可能具有描述性。 他们给您的反馈应该非常清楚,您甚至不必启动调试器,并一步一步地检查代码以检查局部变量。 为什么? 因为那需要时间,而且我们很懒,对吗? 为此,您需要创建描述性测试。 有不同的方法可以实现这一点。 这是其中两个。

添加断言消息

断言消息通常可以在测试断言中指定为附加参数,并且在特定测试用例失败时,它们会作为失败消息出现。

例如,在jUnit中,您可以指定断言消息,例如:

assertEquals("The firstname of the two people should match if the clone was successful", "Fritz", person1.getFirstname());

另一方面,在MSTest中,必须将断言消息作为最后一个参数添加。

Assert.AreEqual("Fritz", person1.Firstname, "The firstname of the two people should match if the clone was successful");

注意 ,不要“过度设计”。 我将这些注释与其他代码注释类似地对待:如果它们添加了有意义的信息,则只需添加它们即可。 否则,它们就是浪费,因此就这样对待它们。

首选显式断言

所说的显式断言的意思是对您要执行的操作使用正确的断言。 例如,如果您需要像前面提到的断言中那样执行相等性检查,请不要使用布尔断言声明。 (这里是一个虚拟的QUnit测试用例的示例)

test('Should correctly clone two people', 1, function(){//...ok(person1.firstname === 'Fritz', 'I expect both names to match if the clone operation succeeded');
});

…以及在输出窗口中的相应结果:

这个结果并不是真正的描述性...

这个结果并不是真正的描述性…

结果没有告诉我们太多,对吧? 您可以说的是,此人的名字与您期望的名字不匹配,因此克隆操作可能不会成功。 但为什么?? 那它的实际价值是多少?

使用equals代替:

test('Should correctly clone two people', 1, function(){//...equal(person1.firstname, 'Fritz', 'I expect both names to match if the clone operation succeeded');
});

……结果又是:

哦,看那里,有描述性的结果。

哦,看那里,有描述性的结果。

现在,此测试用例的结果更具描述性。 它不仅告诉您操作失败,而且还准确地向您显示了预期值和实际值。 这可能会立即提示您可能存在问题的地方。

参考: 单元测试提示:在Juri Strumpflohner的TechBlog博客上,由我们的JCG合作伙伴 Juri Strumpflohner 创建描述性测试 。

翻译自: https://www.javacodegeeks.com/2013/06/unit-testing-tip-create-descriptive-tests.html

单元测试 问题描述

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

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

相关文章

java ftp获取文件夹大小,java 用FTPClient 下载文件时不显示总大小?解决方案

java 用FTPClient 下载文件时不显示总大小?FTPClient ftp new FTPClient();ftp.setControlEncoding("utf-8");OutputStream outputStream null;try {int reply;// 连接FTP服务器// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接…

php中数组生成下拉选项,php利用数组填充下拉列表框

这篇文章主要介绍了php使用数组填充下拉列表框的方法,涉及php操作数组的技巧,具有一定参考借鉴价值,需要的朋友可以参考下本文实例讲述了php使用数组填充下拉列表框的方法。具体实现方法如下&#xff1a;<?php $data array((object)array("titulo">"For…

同时使用传入和传出连接时,相互TLS身份验证存在Java问题

在大多数企业环境中&#xff0c;在应用程序之间的连接中使用某种形式的安全通信&#xff08;例如TLS或SSL&#xff09;。 在某些环境中&#xff0c; 相互&#xff08;双向&#xff09;身份验证也是一项非功能性要求。 有时将其称为双向SSL或双向TLS身份验证。 因此&#xff0c;…

matlab小波脊线,小波脊线提取,模极大值法。运行的结果不太对,代码有些地方我也没完全看懂...

本帖最后由 1393107100 于 2019-5-1 11:10 编辑clear,clcclose all%%%%%% 小波变换 %%%%%%%%%%%%%%%%fs1024;t1/fs:1/fs:1;f1100;f2200;f3300;scos(2*pi*f1*t.*(t>0&t<0.3))2*cos(2*pi*f2*t.*(t>0.3&t<0.8))3*sin(2*pi*f3*t.*(t>0.8&t<1));%sc…

php json追加500错误,在composer.json中添加了一个git地址;composer update 报错

在composer.json中添加了一个git地址&#xff1b;composer update 报错&#xff0c;不知道是什么原因导致的&#xff0c;如图&#xff1a;问题补充&#xff1a;在BAE包里面添加composer.json 后 重新composer updateYour requirements could not be resolved to an installable…

java 解析gson_使用Java和Google GSON解析ESPN API

java 解析gson在我的第一篇文章中&#xff0c;我将解释如何解析ESPN API。 可以在http://developer.espn.com/docs上找到API文档。 首先&#xff0c;您需要请求一个API密钥&#xff0c;然后您可以开始查询REST API以检索JSON响应。 在下面的示例中&#xff0c;我将简单查询在英…

matlab曲线拟合 最低点,Matlab曲线拟合 最小二乘法 polyfit【转】

曲线拟合已知离散点上的数据集 &#xff0c;即已知在点集 上的函数值 &#xff0c;构造一个解析函数(其图形为一曲线)使 在原离散点 上尽可能接近给定的值&#xff0c;这一过程称为曲线拟合。最常用的曲线拟合方法是最小二乘法&#xff0c;该方法是寻找函数 使得 最小。MATLAB函…

多元统计分析matlab,MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法...

MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法&#xff1a;1.层次聚类hierarchical clustering2.k-means聚类这里用最简单的实例说明以下层次聚类原理和应用发法。层次聚类是基于距离的聚类方法&#xff0c;MATLAB中通过pdist、linkage、dendrogram、cluster等…

如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory...

此错误表示您的代码或您在应用程序中使用的任何外部库都在使用SLF4J库 &#xff08;一个开放源代码日志记录库&#xff09;&#xff0c;但无法找到所需的JAR文件&#xff0c;例如slf4j-api-1.7.2.jar因此它是在线程“ main” java.lang.NoClassDefFoundError&#xff1a; org/s…

sin查找表 matlab,利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨

1.使用matlab制作.coe文件查找表的构造构造256点的正余弦表exp(-j*2*pi*(0:255)/256)&#xff0c;分别得到 cos和sin的查找表matlab代码: 求sinfid fopen(sin.txt,a );str1 MEMORY_INITIALIZATION_RADIX10;;str2 MEMORY_INITIALIZATION_VECTOR;fprintf(fid,\t%s\n \t%s\n, s…

lucene使用3.0.3_使用Apache Lucene 4.3轻松进行搜索

lucene使用3.0.3Lucene是用Java编写的全文搜索引擎&#xff0c;可以为任何应用程序提供强大的搜索功能。 Lucene的核心是基于文件的全文本索引。 Lucene提供API创建该索引&#xff0c;然后向该索引添加和删除内容。 此外&#xff0c;它允许使用功能强大的搜索算法从该索引中搜索…

Java124 0,AcWing 124. 数的进制转换java

package acwing寒假每日一题;import java.io.BufferedInputStream;import java.util.*;public class TransNumber {public static void main(String[] args) {Scanner in new Scanner(new BufferedInputStream(System.in));//n次操作int n in.nextInt();//输入字符串&#xf…

php提取pdf首页图片,pdf图片怎么提取

pdf图片的提取方法&#xff1a;首先用极速PDF阅读器打开文档&#xff1b;然后在图片处单击鼠标右键并选择“复制图片”&#xff0c;这时就可以粘贴发送了。本文操作环境&#xff1a;Windows7系统&#xff0c;Microsoft Office PowerPoint2020版本&#xff0c;Dell G3电脑。pdf图…

dlopen linux 实例_Linux静态库和动态库

库从本质上来说是一种可执行代码的二进制格式&#xff0c;可以被载入内存中执行。库分静态库和动态库两种。 静态库和动态库的区别1. 静态函数库这类库的名字一般是libxxx.a&#xff1b;利用静态函数库编译成的文件比较大&#xff0c;因为整个 函数库的所有数据都会被整合进目标…

Neo4j:Cypher – Neo.ClientError.Statement.TypeError:不知道如何添加Double和String

我最近将支持Neo4j的应用程序从Neo4j 3.2升级到Neo4j 3.3&#xff0c;发现围绕类型强制的行为发生了有趣的变化&#xff0c;导致我的应用程序抛出了很多错误。 在Neo4j 3.2和更早版本中&#xff0c;如果将String添加到Double&#xff0c;它将把Double强制转换为String并连接值…

php7 php5.6 array,[转]php5.6 升级到php7及变化

不向后兼容的变更错误和异常处理相关的变更在 PHP 7 中&#xff0c;很多致命错误以及可恢复的致命错误&#xff0c;都被转换为异常来处理了。 这些异常继承自 Error 类&#xff0c;此类实现了 Throwable 接口 (所有异常都实现了这个基础接口)。这也意味着&#xff0c;当发生错误…

python 在末尾增加一个字符串,python - Python File.write在末尾添加额外的字符串 - SO中文参考 - www.soinside.com...

我正在使用python(3.6)更新文本文件&#xff0c;并打开r with open(f.play, r) as f2:play f2.read()result manipulate(play)print(result)f2.seek(0, 0)f2.write(result)通过这样做&#xff0c;我得到了意外的结尾部分ap:Envelope>当然&#xff0c;多余的部分是在第一次…

反射setaccessible_advancedday16类加载器,反射

加载配置文件在src目录下创建一个config.properties配置文件&#xff0c;使用类加载器加载配置文件。//创建集合Properties propertiesnew Properties();//获取src目录下&#xff0c;配置文件的流InputStream in ClassLoader.getSystemClassLoader() .getResourceAsStream(…

eventbus多个订阅_番石榴的EventBus –简单的发布者/订阅者

eventbus多个订阅在查看Google的Guava库版本10的最新添加内容时&#xff0c;我注意到EventBus的添加。 这是发布-订阅样式消息传递系统的轻量级实现。 这类似于JMS提供的发布-订阅模型&#xff0c;但是消息保留在应用程序内&#xff0c;而不是在外部广播。 EventBus允许您在程…

python 字段升序,python 根据两个字段排序, 一个升序, 一个降序

SSL双向认证java实现&lpar;转&rpar;本文通过模拟场景,介绍SSL双向认证的java实现 默认的情况下,我认为读者已经对SSL原理有一定的了解,所以文章中对SSL的原理,不做详细的介绍. 如果有这个需要,那么通过GOOGLE,可以搜索到很 ...List和Tuple类型list列表,list是一种有序的…