公司裡用的是NUnit,但是用起來並不覺得好用,因為發現VS的測試代碼可以自動產生的。於是大致比較了一下Visual Studio裡內建的Unit Test和NUnit的區別。
在stackoverflow上有人討論過這個問題。下面的條目都是摘自各個網頁。做個匯總,方便大家參考。
最表面上來看,用的類庫不同,這個問題很好通過一個宏來解決。
#if !NUNIT
using Microsoft.VisualStudio.TestTools.UnitTesting;
#else
using NUnit.Framework;
using TestClass = NUnit.Framework.TestFixtureAttribute;
using TestMethod = NUnit.Framework.TestAttribute;
using TestInitialize = NUnit.Framework.SetUpAttribute;
using TestCleanup = NUnit.Framework.TearDownAttribute;
using TestContext = System.String;
using DeploymentItem = NUnit.Framework.DescriptionAttribute;
#endif
NUnit有這樣幾個優點
1. 獨立於IDE,可以單獨運行。也可以以命令列方式運行。(vs應該也可以吧?)
2. 版本更新快。(我不認為這是個優點,而且我也並不覺得快啊。)
3. VS的UT工具運行速度慢。(不一定)
NUite也有這樣幾個缺點
1. 不支援Debug,要安裝TestDriven.NET才支援。
2. 不支援程式碼涵蓋範圍的查看,要和NCover一起用。而VS的代碼覆蓋很清楚。
3. 不能自動產生測試代碼,也許和CodeSmith一起用好些,不過後著要收費的。
補充一點:NCover產生的XML太大了,動不動IE就Crash了,(用NCoverExplorer更好,不過公司沒有……)。今天找了半天,都沒有找到辦法讓NCover只產生特定Namespace的資料的命令列參數。最後改了xsl,不顯示Method級的XML,好了些。
VS UT最大的缺點——價格!只有VS Pro才支援UT,只有VSTS才支援代碼覆蓋。
還有人認為VSUT比較難以與CC.NET整合。雖然沒有去試著在CC中直接使用VSUT,但是感覺應該是可以的。
再來看一下VS的價格。
|
With Premium MSDN |
With Professional MSDN |
Without MSDN |
VS 2008 Team System |
$10939 |
|
|
VS 2008 Professional |
$2499 |
$1199 |
$799 |
VS 2008 Standard |
|
|
$299 |
最新報價請參考:http://msdn.microsoft.com/en-us/aa700832.aspx
另外,ReSharper(30天試用)、xUnit(開源)、MbUnit也都是UT的不錯選擇。
參考:http://stackoverflow.com/questions/92869/nunit-vs-visual-studio-2008s-test-projects-for-unit-testing
http://stackoverflow.com/questions/709/net-testing-framework-advice
http://stackoverflow.com/questions/1760/net-unit-testing-packages