0

對於單元/集成測試與內置MsTest選擇NUnit有沒有什麼優勢?女士測試或NUnit?

+1

[NUnit和Microsoft的單元測試框架(VS 2008)有真正的區別嗎?](http:// stackoverflow。com/questions/2422238/are-real-differences-between-nunit-and-microsofts-unit-testing-framework) – JohnFx 2010-05-26 23:24:14

+0

還有一個類似的問題[here](http://stackoverflow.com/questions/2422238/ -nhere-real-differences-between-nunit-and-microsofts-unit-testing-framework/2422339#2422339),其中我給出了Roy Osherove的一篇博客文章的鏈接,突出了它們之間的差異。 – Paddyslacker 2010-05-25 00:26:59

回答

2

它們非常相似。差異很微妙。

  • NUnit有參數化測試的測試用例; MSTest不。

你可以寫

[TestCase(1, "one)] 
[TestCase(2, "two)] 
[TestCase(3, "three)] 
[TestCase(4, "four)] 
public void CanTranslate(int number, string expectedTranslation) 
{ 
    var translation = _sut.Translate(number); 

    translation.Should().Be.EqualTo(expectedTranslation); 
} 

,而不是寫4個測試或使用測試內部的循環。未通過測試的錯誤信息會更加清晰,並且測試結果總是可以方便地分組。

  • NUnit往往會更加完整和靈活。例如,它帶有一組像酷似attributes的組合。

例如

[Test, Combinatorial] 
public void MyTest([Values(1,2,3)] int x, [Values("A","B")] string s) 
{ 
    ... 
} 

這相當於運行測試

MyTest(1, "A") 
MyTest(1, "B") 
MyTest(2, "A") 
MyTest(2, "B") 
MyTest(3, "A") 
MyTest(3, "B") 

(見原頁here

  • MSTest的總是實例化的新實例每個測試方法的測試類d正在執行。這非常有用,因爲在每次單獨測試之前,將運行Setup和TearDown方法,並重置每個實例變量。隨着NUnit的,你要照顧最終測試之間共享實例變量的(儘管這不應該是一個問題之二:一個精心設計的測試應該通過設計來隔離)

    • 隨着NUnit的一個抽象類可以是測試夾具,你可以繼承其他測試裝置。 MsTest沒有此功能。
  • MSTest與Visual Studio很好地集成。你需要一個第三方插件來有效地與NUnit的工作,例如ReSharper的,Test Driven .NETNCrunch

  • NUnit的斷言有一個流暢的版本,所以你可以寫

例如

Assert.That(result).Is.GreaterThan(9) 

而不是

Assert.Greater(9, result); 

隨着SharpTestEx你甚至可以這樣寫:

result.Should().Be.GreaterThan(9); 

,並採取強類型的IntelliSense的優勢。