做过单元测试的同学大概都知道以上几种测试框架,但我一直很好奇它们到底有什么不同,然后搜到了一篇不错的文章清楚地解释了这几种框架的最大不同之处。
地址在这里:
简而言之,三者是非常相似的,如下所示:
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下个包,换下特性而已。
转载链接: