C#常用单元测试框架比较:XUnit、NUnit和Visual Studio(MSTest)

     做过单元测试的同学大概都知道以上几种测试框架,但我一直很好奇它们到底有什么不同,然后搜到了一篇不错的文章清楚地解释了这几种框架的最大不同之处。

     地址在这里:http://www.tuicool.com/articles/F3eEn2j

     简而言之,三者是非常相似的,如下所示:

 1 [TestCase(1)]
 2 [TestCase(2)]
 3 [TestCase(3)]
 4 [TestCase(4)]
 5 public void FireMultipleTimes(int fireCount)
 6 {
 7     Bug bug = new Bug();
 8     Raygun gun = new Raygun();
 9 
10     for(int i = 0; i < fireCount; i++) 
11     {
12         gun.FireAt(bug);
13     }
14 
15     if (fireCount >= 3) 
16     {
17         Assert.IsFalse(gun.HasAmmo());
18     }
19     else 
20     {
21         Assert.IsTrue(gun.HasAmmo());
22     }
23 }

     上面是NUnit的,XNunit也有类似的方法。这篇文章非常适合刚入门单元测试的同学看。

     不过包括Abp在内的开源框架用的都是XUnit或NUnit。

     在网上调查了一下,关于MSTest的负面评论还是比较多的,最主要的问题就在于MSTest的弹性不够好,它无法在非微软的平台上运行单元测试,不过在 .Net Core日渐成熟的今天,我觉得现在已经不是问题了。如下MSTest的测试代码:

 1 [TestClass]
 2 public class UnitTest1
 3 {
 4     [DataTestMethod]
 5     [DataRow(1, 2, 2)]
 6     [DataRow(2, 3, 5)]
 7     [DataRow(3, 5, 8)]
 8     public void AdditionTest(int a, int b, int result)
 9     {
10         Assert.AreEqual(result, a + b);
11     }
12 }

     现在来看,几乎这些框架都没差了,在StackOverflow看到一条我很赞同的看法:

     其实不用顾虑那么多,随便选择吧,MSTest对Vs的集成是最好的,而且也很容易上手,如果哪一天碰到它所无法解决的事情,切换到其他框架也非常简单,仅仅只是Nuget下个包,换下特性而已。

 

转载链接:https://www.cnblogs.com/RobotZero/p/6732728.html

转载于:https://www.cnblogs.com/supersnowyao/p/8478186.html

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

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

相关文章

实验五 类和对象-3

1.ex3.cpp 1 #include <iostream>2 #include <vector>3 #include <string>4 using namespace std;5 6 // 函数声明 7 void output1(vector<string> &); 8 void output2(vector<string> &); 9 10 int main() 11 { 12 vector<st…

Vector用法详解

这篇文章的目的是为了介绍std::vector&#xff0c;如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用&#xff0c;如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器&#xff0c;而且应该不会再去…

linux 共享移动硬盘,随时登陆上QQ 自带Linux移动硬盘实战

在以往我们的观念中&#xff0c;移动硬盘顶多就是个移动存储设备&#xff0c;根本谈不上有什么功能&#xff0c;但今天这款一盘通却将我们原始的观念打了一个180大转弯&#xff01;如果你的电脑支持USB设备启动&#xff0c;那么只需要在BIOS进行一下更改&#xff0c;一盘通就可…

需求分析的图形工具(层次方框 warnier IPO)

1 层次方框图 层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。 例如&#xff0c;描绘一家计算机公司全部产品的数据结构可以用下图层次方框图表示。 这家公司的产品由硬件、软件和服务3类产品组成&#xff0c;软件产品又分为系统软件和应用软件&#xf…

如何处理错误信息 Pricing procedure could not be determined

2019独角兽企业重金招聘Python工程师标准>>> 当给一个SAP CRM Quotation文档的行项目维护一个产品时&#xff0c;遇到如下错误信息&#xff1a;Pricing procedure could not be determined 通过调试得知错误消息在function module CRM_PRIDOC_COM_PRCPROC_DET_SEL第…

Flask爱家租房--订单(下订单)

文章目录0 、效果展示1、思路总结2、后端代码3、前端js4、前端html0 、效果展示 detail.html booking.html 1、思路总结 1&#xff09;用户打开房屋详情页detail.html之后&#xff0c;后端detail.js会判断此访问用户是否为房东&#xff0c;若不是房东&#xff0c;则在详情…

linux下各权限的细分

PS&#xff1a;有时候你发现用root权限都不能修改某个文件&#xff0c;大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大&#xff0c;其中一些功能是由Linux内核版本来支持的&#xff0c;不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修…

红帽linux lnmp搭建,Linux(redhat5.4)下lnmp环境的搭建

在前面我们已经实现了lamp架构的创建&#xff0c;今天就让我们来看一看lnmp架构是如何实现的。计划的实验步骤如下&#xff1a;1. 数据库mysql的安装2. Nginx的安装&#xff0c;libevent(编译库代码)的安装&#xff0c;pcre的安装3. Php的安装4. 测试1. Mysql 的安装//注意:小编…

为什么借助开源学习是最有效的?

导读&#xff1a;盛大创新院高级研究员庄表伟近日编撰系列文章《借助开源项目&#xff0c;学习软件开发》活动&#xff0c;引起业界关注。庄表伟认为&#xff0c;通过编撰这些文章&#xff0c;希望更多开发者能够借助开源项目提高开发效率&#xff0c;减少重复劳动并从开源软件…

redux middleware 源码分析

原文链接 middleware 的由来 在业务中需要打印每一个 action 信息来调试&#xff0c;又或者希望 dispatch 或 reducer 拥有异步请求的功能。面对这些场景时&#xff0c;一个个修改 dispatch 或 reducer 代码有些乏力&#xff0c;我们需要一个可组合的、自由增减的插件机制&…

Flsak爱家租房--订单(获取用户订单、用户评论)

文章目录0.页面效果1.思路总结2.后端代码3.前端js4.前端html0.页面效果 1.思路总结 1&#xff09;用户点击“我的订单”&#xff0c;js向后端获取数据&#xff0c;并加载在前端的模板中&#xff1b; 2&#xff09;用户点击相应订单的“去支付”按钮&#xff0c;js向引导用户…

【SCOI2005】【BZOJ1087】互不侵犯King(状压dp)

problem 在NN的棋盘里面放K个国王每个国王会攻击它周围的一圈共8个格子使他们互不攻击&#xff0c;共有多少种摆放方案N < 9solution 用01串表示某一行放置的情况 首先枚举当前做到第几行&#xff0c;以及当前一共放了几颗棋子。于是状态f[i][j][k]表示到第i行&#xff0c;一…

软件工程形式化技术简介

形式化技术在软件工程中有效的提高了开发的效率、改进了软件开发的质量、减少了开发费用。形式化的技术容易在软件的规约上取得一致性&#xff0c;它属于一种非常有效的交流方式。 (一)非形式化的缺点 用自然语言书写的系统规格说明书&#xff0c;可能存在矛盾、二义性、含糊性…

华为荣耀笔记本linux怎么下载软件,华为magic book笔记本怎么下载软件

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。华为magic book笔记本下载软件的方法如下&#xff1a;1、首先&#xff0c;点击桌面开始图标&#xff0c;找到应用商店&#xff0c;并点击。2、进入应用商店&#xff0c;点击搜索栏&a…

国内外软件开发上的差距与分析

提高自己&#xff0c;迎接好的未来。 在开始任何其他文字之前&#xff0c;首先有必要正视一个根本现实&#xff1a;国内外软件开发的水平是有差距的。 这一结论的最直接证据是每一轮新技术的发起者基本上都是国外的人或公司&#xff1a; 从方法论&#xff08;CMMI&#xff0…

Flask爱家租房--订单(房东接单、拒单)

文章目录0.效果展示1.效果展示2.后端接口3.前端js4.前端html0.效果展示 1.效果展示 1&#xff09;当房东点击“客户订单”&#xff0c;js向后端接口get_user_orders()获取数据&#xff0c;订单页面开始加载&#xff1b; 2&#xff09;当房东确定接单时&#xff0c;js会向后端…

WebView性能优化--独立进程

Android允许一个app同时存在多个进程&#xff0c;可以根据需要把不同的模块放到不同进程中处理。 一、WebView独立进程的好处 1.有效增大App的运存&#xff0c;减少由webview引起的内存泄露对主进程内存的占用。 2.避免WebView的Crash影响App主进程的运行。 3.拥有对WebView独立…

linux修改python默认版本

linux修改python默认版本 update-alternatives --config pythonposted on 2018-05-24 22:42 psycheman 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/psycheman/p/9085576.html

什么是有穷状态机

有穷状态机的作用是描述对象在它的生命周期内所经历状态序列&#xff0c;以及如何响应来自外界的事件。有穷状态机首先包含一个有限状态的集合&#xff0c;还包含了从一个状态到另外一个状态的转换。 有穷自动机看上去就像是一个有向图&#xff0c;其中状态是图的节点&#xf…