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的优势。