欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-25 18:54:21
做过单元测试的同学大概都知道以上几种测试框架,但我一直很好奇它们到底有什么不同,然后搜到了一篇不错的文章清楚地解释了这几种框架的最大不同之处。 地址在这里:http://www.tuicool.com/articles/F3eEn2j 简而言之,三者是非常相似的,如下所示: 上面是NUnit的,XN ......

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

     地址在这里: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 }

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

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

 

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