做過單元測試的同學大概都知道以上幾種測試框架,但我一直很好奇它們到底有什么不同,然后搜到了一篇不錯的文章清楚地解釋了這幾種框架的最大不同之處。
地址在這里: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下個包,換下特性而已。