单元测试,NUnit或Visual studio?

Tim*_*Tim 114 c# nunit unit-testing visual-studio

我正在使用Visual studio(有时是resharper)来运行我的单元测试.

我听说过NUnit,但我不知道很多事情......

我应该关心它吗?它能提供比视觉工作室更好的东西吗?

我应该使用NUnit吗?为什么?

Eli*_*sha 98

NUnit与MS-Test相比几乎没有什么优势

  1. Suite属性 - 可以聚合测试并单独执行它们(例如,对于具有快速和慢速测试的大型项目非常有用)
  2. 可读断言方法,例如Assert.AreEqual(expected, actual)vsAssert.That(actual, Is.EqualTo(expected))
  3. NUnit有频繁的版本更新 - MS-Test每个VS版本只有一个.
  4. 许多综合跑步者包括Resharper和TestDriven.NET
  5. 预期的异常消息断言 - 可以使用NUnit中的属性完成,但必须在MS-Test中使用Try-Catch完成
  6. [TestCase]!NUnit允许参数化测试.

  • MS-Test中的属性也可以声明异常:ExpectedExceptionAttribute. (31认同)
  • #3不是一个功能,它是一个问题而#5是100%错误; MS Test具有ExpectedException属性,*并且始终具有*. (25认同)
  • 我会将NUnit与Assert.Throws <>()一起使用,因为它遵循AAA-Principle,而不是属性方式. (9认同)
  • "#3不是一个功能,这是一个问题" - 听起来不是一个非常敏捷的思维方式...... (6认同)
  • @Elisha我记得,他们故意不支持消息文本检查,因为文本看起来不重要且可以是任意的.也就是说,它不会影响程序的流程. (4认同)
  • NUnit有一个独立的跑步者,安装简单轻便 (2认同)
  • @Randolpho,ExpectedException存在,但它不支持消息断言.缺少的功能只是抛出的异常消息断言,而不是抛出的异常本身.如果抛出异常,我可以断言使用MS-Test属性但如果我想验证它包含正确的消息,则必须使用try-catch完成. (2认同)
  • 第2点中的哪些表达式是NUnit,哪个是MSTest? (2认同)

flq*_*flq 72

从我目前的角度来看(经过8个月的开发,平均约有10个开发人员)我建议不要使用MSTest,原因如下

  • 框架本身很慢.我不是指您编写的测试代码 - 这是您可以控制的.我的意思是运行这些测试的框架很慢,无论是运行测试套件,单个测试等.
  • 需要保留一个Test-Metadata文件,当几个开发人员正在处理它时,它总是会导致复杂化(重新创建例如元数据等).每个其他测试套件都不需要元数据文件.组织测试很好,但是你可以通过名称空间,类和方法名称实现相同的功能.
  • 进行持续集成,如果要在构建计算机上运行单元测试,则需要在该计算机上安装Visual Studio.

换句话说,如果我必须在8个月前再次决定,我可能会采取NUnit.我可能没有集成的测试结果报告,但开发人员可以获得更加无缝的测试体验.

  • +1,除非您没有选择,否则请避免使用MSTest.各种开源框架更好(xUnit,NUnit,MbUnit等). (6认同)

Ste*_*ger 49

这是我对MS Test的体验

  • 我们正在运行MS测试,大约3800测试.
  • 测试只需要很长时间才能开始执行,这在运行单个测试时很痛苦.
  • 执行测试需要大约1GB的内存.不,这不是由于我们的测试中的内存泄漏.我们经常遇到OutOfMemoryExceptions.
  • 因为它使用了那么多资源,所以我们开始从批处理文件中执行测试.那么整个集成有什么用呢?
  • 它有缺陷和不稳定:
    • 例如,如果从测试中删除[Ignore]属性,则它无法识别它,因为它会在某处缓存有关测试的信息.您需要刷新测试列表,有时可以解决问题,或重新启动VS.
    • 它随机不会将引用程序集复制到该目录.
    • 部署项(要使用的其他文件)无法正常工作.它们被随机忽略.
  • 在vsmdi和testrunco​​nfig文件中隐藏(在测试代码中不可见)信息.如果你不关心它,它可能不起作用.
  • 在功能上它可能与NUnit相当,但如果你考虑使用VS测试版,它会非常昂贵.

另外:我们现在有更多的测试,甚至不能说多少.由于OutOfMemoryExceptions和其他不稳定性问题,不可能再从Visual Studio中运行它们.我们从脚本运行测试.在Visual Studio中查看测试结果会很容易,但是当解决方案打开时,VS会崩溃(每次).所以我们需要使用文本搜索来搜索失败的测试.再也没有集成工具的优势.


另一个更新:我们现在正在使用VS 2013.很多事情发生了变化.自从我们开始以来,他们第三次重写了MS Test测试运行器.这引起了很多重大变化,但新版本都没有做得更好.我们很高兴我们没有使用MS Test的精彩功能,因为它们都不再受支持了.这真是一个耻辱.我们仍在使用脚本来构建和运行所有单元测试,因为它更方便.Visual Studio需要几分钟才能开始运行测试(编译后的时间测量,直到第一次测试开始).他们可能会通过更新修复它,这可能是我们项目的一个特定问题.但是,Resharper在运行相同测试时要快得多.

结论:至少与Resharper结合使用,MS Test非常有用.我希望他们最终能够找到如何编写测试运行器,并且在下次更新Visual Studio时不会进行这种重大更改.


bas*_*ijn 18

NUnit可与visual studio 结合使用.它是一个框架而不是一个单独的程序.所以你可以关心看看它是否适合你:).

alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

"安装插件后,你会在工具菜单下找到一个新的子菜单."

有关导入它的更多信息,请参见http://nunitit.codeplex.com/.

此外,使用搜索SO可以找到很多.本主题列出了NUnit优于MS标准测试的优势.


Mac*_*iej 6

NUnit的最大优势MS-Test是MS-Test可以使用Reflection生成模拟对象.我发现它非常有用

  • http://code.google.com/p/moq/、http://www.nmock.org/、http://stackoverflow.com/questions/37359/what-c​​-mocking-framework-to-use (11认同)