为了保证代码能够正常工作,我们常常编写了大量单元测试,并且代码覆盖率也做到了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“,记住我!

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

  1. 做python自动化得时候怎么添加断言_在编写Web自动化测试用例的时候,如何写断言使新手不解,严格意义上来讲,没有断言的自动化脚本不能叫测试用例。就像功能测试一样,当测试人员做了一些操作...

    在编写Web自动化测试用例的时候,如何写断言使新手不解,严格意义上来讲,没有断言的自动化脚本不能叫测试用例.就像功能测试一样,当测试人员做了一些操作之后必然会判断实际结果是否等于预期结果,只不过,这个 ...

  2. 学计算机的普遍字写得都不好,国人普遍写不好汉字的原因探析

    汉字是我们进行交际的重要工具,写好规范汉字是国人应该具备的一项基本技能.书写规范得体的汉字,即能够准确地记载和传递信息,还能给阅读者创造一个情趣别致的审美意境.昔日,书写一手漂亮的汉字是令人羡慕的特长 ...

  3. 写给像我一样初次接触渗透测试的人

    写给像我一样初次接触渗透测试的人 由于技术有限,可能存在一些错误,欢迎指出,此篇文章没有任何技术性的东西,完全是一篇指南. 这是大学快毕业才了这几天解到的职业,只能说我目光短浅,之前以为黑客都是骗子之 ...

  4. MATLAB实现基于BP神经网络的手写数字识别+GUI界面+mnist数据集测试

    文章目录 MATLAB实现基于BP神经网络的手写数字识别+GUI界面+mnist数据集测试 一.题目要求 二.完整的目录结构说明 三.Mnist数据集及数据格式转换 四.BP神经网络相关知识 4.1 ...

  5. 关于在电脑写的项目在手机上真机测试的注意事项

    关于在电脑写的项目在手机上真机测试的注意事项 首先就要电脑和手机都在同一个局域网内 (什么意思呢 简单来说就是把电脑有线连接断了 电脑和手机连上同一个WIFI) 第一步 ipconfig window ...

  6. 测试用例-写测试用例时怎么入手

    刚开始工作的朋友,会和我一样有不少的困惑!用例该怎么写?重点在哪?项目急来不及写用例怎么办?下面分享自己的思路,欢迎探讨.. 问:拿到技术文档该如何下手,如何建立测试用例树. 通读文档,明确产品的核心 ...

  7. 公司测试用例写得乱七八糟,直到制定了这份《测试用例编写规范》

    1.目的 统一测试用例编写的规范,为测试设计人员提供测试用例编写的指导,提高编写的测试用例的可读性,可执行性.合理性.为测试执行人员更好执行测试,提高测试效率,最终提高公司整个产品的质量. 2.范围 ...

  8. 8大征兆判断你的单元测试用例写得如何

    300G全套最新软测视频教程分享 链接:https://pan.baidu.com/s/17jkyGn-Wm-zC6QQLkWjrsw 提取码:o94n 如果您从事软件开发很长一段时间,那么您很容易理 ...

  9. 为什么要写测试用例,测试用例写给谁看?

    写用例是测试人员梳理需求的一个重要手段,经验丰富的测试人员在写的过程中中会加入自己的思考即分析需求,消化需求的同时经常会发现需求文档中存在的未被提及的问题,可以帮助产品经理细化需求. 在写用例的过程中 ...

最新文章

  1. 使用SDL打造游戏世界之入门篇 - 1
  2. 完美解决:python报错:‘utf-8‘ codec can‘t decode byte 0xa1 in position 56: invalid start byte
  3. synchronized不能锁静态变量_多线程编程不可错过——彻底理解synchronized
  4. 项目: 用Easyx绘制围棋和象棋的棋盘
  5. 找不到匹配的key exchange算法_目标检测--匹配策略
  6. 架构师一般做到多少岁_软件测试可以做到多大岁数?
  7. 校园PHP表白墙程序源码
  8. zabbix监控TCP连接数
  9. 官方教程:Apache Kylin和Superset集成,使用开源组件,完美打造OLAP系统
  10. 服务器linux什么镜像好用,Linux系统镜像建站Debian和Ubuntu选择哪个比较好
  11. 海康DS-2DY5223IW-DM
  12. 成为技术主管需要做到的三点
  13. 大数据处理系统,分布式存储系统和分布式计算框架介绍
  14. Excel拆分单元格内容(把一个单元格的内容拆分到多列)
  15. ant design of vue中表格列内容过长,需要截取并且鼠标滑过悬浮显示全部内容
  16. 解决gradle下找不到符号错误
  17. cmd.exe启动参数详解
  18. 小米10青春版科学计算机,中端新势力 小米10青春版对华为nova 7 SE
  19. 前端实现登录拼图验证
  20. OpenCV python 图片镜像

热门文章

  1. 一个古怪的VISTA网络问题解决的坎坷经历
  2. 如何识别是三层交换机还是二层交换机
  3. 扫描java类文件_java递归与非递归实现扫描文件夹下文件的实例代码
  4. sublime python配置运行
  5. 使用生成器创建新的迭代模式
  6. 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流
  7. DOM节点创建(jQuery)
  8. 自定义View 进度条
  9. Android下强制打开软键盘
  10. 改变listview中item选中时文字的颜色