.NET测试用例写的好不好?让变种来测试一下!

为了保证代码能够正常工作,我们常常编写了大量单元测试,并且代码覆盖率也做到了100%。但是在生产环境运行时还是会出问题!为什么? 

这是因为你没有进行变异测试!

变异测试

变异测试就是把bug(变种mutant)自动加入到你的代码中。然后针对每个变种进行测试。测试应该失败,如果测试通过——变种存活下来了,这就意味着测试代码存在问题。 

Stryker.NET

使用Stryker.NET可以为我们的.NET Core和.NET Framework项目提供变异测试。

Stryker.NET支持多个变种,例如算术运算符、逻辑运算符,甚至LINQ表达式等。你可以在文档中查看可用变种的完整列表https://stryker-mutator.io/docs/stryker-net/Mutators。

执行下面命令安装Stryker.NET:

dotnet tool install dotnet-stryker --global

下面,我们GitHub Trending上排名较高的dotnet-architecture/eShopOnContainers(https://github.com/dotnet-architecture/eShopOnContainers)来演示Stryker.NET如何工作。 

eShopOnContainers包含了大量业务代码和单元测试。我们重点测试Catalog.UnitTests。

功能一瞥

命令行进入Catalog.UnitTests所在目录后,执行下列命令:

dotnet stryker

等待一段时间后,会提示运行完成,测试结果输出到了一个Html文件。

打开报告,我们可以看到,总体得分1.67,共引入了682个变种,只有11个被杀死,还有8个存活。(测试用例质量不行啊,撇嘴) 

让我们看看CatalogController.cs中存活的一个变种:

可以看到,Stryker.NET使用了相等变种,将“==”改为“!=”。结果告诉我们,没有任何测试可以检测到这种变化。

结论

变异测试就是对测试结果进行检测,以尽量减少测试用例编写不完善的机会。

那些不能被杀死的变种,终将使你的代码更强壮!

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

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

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

相关文章

你根本想象不到,学霸到底经历过什么

全世界只有3.14 % 的人关注了青少年数学之旅在微信的订阅号中,每人最多有12个常读公众号。可公众号这么多,哪些公众号值得关注呢?今天给大家推荐的几个公众号,不仅生产优质的时效性内容,还会提供各种多元化的内容角度&…

mysql重装远程服务未_MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)...

最近服务器很不稳定,于是重装了mysql 和php 服务,但是接着却遇到了很头疼的麻烦。远程连接mysql是总是提示:Lost connection to MySQL server at ‘reading initial communication packet, system error: 0很明显这是连接初始化阶段就丢失了连…

买基金如何开户

开户主要有两种途径:(1)投资者通过深交所交易系统认购、买入或卖出上市开放式基金须使用深圳A股账户或深圳证券投资基金账户(以下简称“深圳证券账户”)。投资者可通过中国结算公司深圳分公司的开户代理机构&#xff0…

OpenStack开启亚洲之旅

11月5-8日,OpenStack峰会在中国香港亚洲国际博览馆举行。这是OpenStack峰会首次在北美地区之外举行,吸引了约3000名全球各地的企业、用户和开发者。中国已经是除美国以外OpenStack软件下载量和对社区贡献代码量第二大的地区。OpenStack峰会此次落户香港也…

历史上最怪异的23种飞行器,设计者脑子里都想什么了

全世界只有3.14 % 的人关注了青少年数学之旅历史的长河中有无数稀奇古怪(呆萌)的发明被无情淘汰,而飞行器的发明可谓人类探索道路上尤为浓烈的一笔,过去的110多年里,空中就曾出现以下23中古怪的飞行器。下面这张图比较…

NET问答: 如何让 HttpClient 支持 Http 2.0 协议?

咨询区 Justin Lessard:我的一个项目需要支持 Http 2.0 进行数据的收发,目前用的项目版本是 .NET Core 2.2,我选型了 HttpClient,但是我发现一个问题,在生产环境中的程序返回的 response 版本一直都是 Http 1.1&#x…

最近读的书与做的事

做的事情无非是Thesis当头,其他跟上。Axss的工作室站点,还有就是IAESTE项目的部分页面。读的书:《深入探索C/C》:搞清楚以前很多一知半解的概念《Game Programming Gem 3》:对我而言仍是太深了点,不过当作了…

从mysql读取图片_如何从sql数据库内读取图片

privatevoidSHOW(){MemoryStreamstreamnewMemoryStream();byte[]buffBytenull;stringsqlstr"selectRefFinImagefromRefTablewhereRefId5";//我要规定死读入第五张图片SqlConnectio...private void SHOW(){MemoryStream stream new MemoryStream();byte[] buffByte …

邮件发送类,支持Gmail

邮件发送类,支持Gmail&#xff0c;使用简单方便 usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net;usingSystem.Net.Mail;namespaceLZ2007.Function...{ /**//// <summary> /// 邮件发送类 /// <CreateDate>2007/07/02<…

和爸爸的聊天永远是个谜。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】【15】【16】【17】【18】【19】【20】【21】【22】【23】【24】&#xff08;图源网络&#xff0c;侵权删&#xff09;

FZU Problem 2030 括号问题

Problem Description 给出一个字符串&#xff0c;其中包括3种字符: ‘(‘, ‘)’, ‘?’.其中?表示这个字符可以是’(‘也可以是’)’. 现在给出字符串S,你可以在’?’处填写’(‘ 或者 ‘)’&#xff0c;当然随意填写得到的序列可能是括号不匹配的。例如”(?”&#xff0c…

python实现人脸识别_python人脸识别代码实现丨内附代码

Python在人脸识别方面功能很强大&#xff0c;程序语言简单高效&#xff0c;下面小编来编程实现一下如何实现人脸识别。如有错点&#xff0c;还望斧正识别图片中的人脸位置#人脸识别分类器路径tool_url rC:\Users\86188\AppData\Local\Programs\Python\Python36-32\Lib\site-pa…

dotnet 通过引用 msbuild 程序集实现自己定制编译器

本来我想说的是基于引用 msbuild 程序集来自己做一个编译器&#xff0c;但是想想好像本文做的&#xff0c;和造编译器没啥关系&#xff0c;咱自己调用 msbuild 的 API 而已。本文来告诉大家如何引用 msbuild 程序集&#xff0c;如何在自己的应用程序里面嵌入 msbuild 的构建代码…

通过修改注册表设定浏览器的却省值

安装NetScape后&#xff0c;点击*.htm文件&#xff0c;却是用NetScape打开的&#xff0c;有时候感觉不爽&#xff0c;怎样才能将浏览器的却省打开设定为IE呢&#xff1f;通过修改注册表的方法可以解决&#xff1a;保存如下内容为IEChn.reg&#xff0c;运行即可。REGEDIT4[HKEY_…

[转贴]犯贱报(一张浓缩大学生活的..)

1 学校门口总是有一些骗子&#xff0c; 有的开着车&#xff0c; 有的没有开车。 没有开车的&#xff0c; 骗骗我们的钱&#xff0c; 开着车的&#xff0c; 骗骗我们的人。 2 有一天&#xff0c; 校门口来了一名物理爱好者&#xff0c; 认为自己推翻了相对论。 我们去探讨请教&…

大牛逝世 = 新人上位 = 科学进步?新研究表明确实如此

全世界只有3.14 % 的人关注了青少年数学之旅学术大牛们生前为人类创造了巨大的知识财富&#xff0c;死后也以另一种形式造福了科学。一项新研究表明&#xff0c;明星科学家去世后&#xff0c;同一学科分区中从未与他们合作的科学家论文发表数量提升 8.6%&#xff0c;其他领域的…

dns的子域授权

主服务器配置&#xff1a;1.在/var/named/neo.zone里添加如下数据...前面省略... SOA部分序号加大&#xff0c;其余不变dep1.neo.com. IN NS dns.dep1.neo.com.dns.dep1.neo.com. IN A 10.3.156.45从服务器配置&#xff1a;1.修改/etc/named.rfc1912.zones&#xff0c;假设文件…

扩展mysql_扩展mysql - 手把手教你写udf

1 MySQL简介MySQL是最流行的开放源码SQL数据库管理系统&#xff0c;相对于Oracle&#xff0c;DB2等大型数据库系统&#xff0c;MySQL由于其开源性、易用性、稳定性等特点&#xff0c;受到个人使用者、中小型企业甚至一些大型企业的广泛欢迎&#xff0c;MySQL具有以下特点&#…

I want go to school

那天&#xff0c;村里来了英语老师&#xff0c;她教我们说了第一句英语&#xff1a;“I want go to school.” 你听到了吗&#xff1f;那是最震撼的呐喊&#xff01;

.NET 6 Preview 6 正式发布: 关注网络开发

微软.NET 团队的项目经理在博客上发布了.NET 6 Preview 6, 在候选发布阶段之前的倒数第二个预览版&#xff0c;也就是8月份还会发布一个Preview 7&#xff0c;9月份开始进入RC&#xff0c;两个候选版本将专注于质量修复&#xff0c;直到 11 月的最终版本。Preview 6 版本本身相…