unit testing,NUnit还是Visual Studio?

我使用Visual Studio(有时是resharper)来运行我的unit testing。

我听说过NUnit,但是我不知道很多…

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

我应该使用NUnit,为什么?

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

  1. 套件属性 – 可以聚合testing并分别执行它们(例如对于具有快速和慢速testing的大型项目很有用)
  2. 可读Assert方法,例如Assert.AreEqual(expected, actual) vs Assert.That(actual, Is.EqualTo(expected))
  3. NUnit有频繁的版本更新 – MS-Test只有一个VS版本。
  4. 许多集成的运动员,包括Resharper和TestDriven.NET
  5. 预期的exception消息断言 – 可以在NUnit中使用属性完成,但必须在MS-Test中使用Try-Catch完成
  6. [TestCase] ! NUnit允许参数化testing。

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

  • 这个框架本身很慢。 我不是指你写的testing代码 – 这是在你的控制之下。 我的意思是运行这些testing的框架很慢,无论是运行testing套件,单个testing等。
  • 需要保留一个testing元数据文件,当几个开发人员正在处理它(重新创build元数据等)时,这个文件总是会导致复杂的问题。 每个其他testing套件都不需要元数据文件。 组织你的testing是很好的,但是你可以通过命名空间,类和方法名来实现。
  • 做持续集成,如果你想在你的构build机器上运行unit testing,你将需要在该机器上安装Visual Studio。

换句话说,如果8个月前我还要再决定,我可能会拿NUnit。 我可能没有集成的testing结果报告,但开发人员将拥有更多的无缝testing经验。

这是我的MStesting经验

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

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


另一个更新 :我们现在正在使用VS 2013。 很多事情都改变了。 自从我们开始以来,他们第三次重写了MS Testtesting赛跑者。 这导致了很多突变,但是新版本都没有做得更好。 我们很高兴我们没有使用MS Test的奇特function,因为它们都不再被支持。 这真是一个耻辱。 我们仍然使用脚本来构build和运行所有的unit testing,因为它更方便。 Visual Studio需要几分钟才能开始运行testing(编译后的时间测量,直到第一次testing开始)。 他们可能用更新修复它,这可能是我们项目的一个特定问题。 但是,运行相同的testing时,Resharper要快得多。

结论 :至less配合Resharper,MS Test是有用的。 我希望他们最终能够findtesting者应该如何编写,下次更新Visual Studio时不会做这种突破性的改变。

NUnit可以与视觉工作室结合使用。 这是一个框架,不是一个单独的程序。 所以你可以关心一下,看看是否适合你:)。

替代文字http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

“安装插件后,你会在工具菜单下find一个新的子菜单。”

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

另外,使用SO的search可以find很多。 本主题列举了NUnit优于MS标准testing的优点。

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

NUnit与标准版的VS一起工作。

NUnit是一个unit testing框架,它也支持resharper。 我想你正在使用微软的unit testing框架,所以NUnit只是微软产品的一个替代品;)

这里是NUnit主页的链接: http : //nunit.org/index.php

我不确定其他人,但NUnit提供了很好的GUI和控制台来运行你的unit testing,你也可以生成NUnittesting执行结果的报告,它会给出testing失败或通过的细节,以及它是几点拿你的unit testing

如果您使用Visual Studio您必须使用NUnit进行unit testing,如果您正在运行Java(Netbeans),则必须使用JUnit进行unit testing。

这是一个简单的计算器unit testing的例子

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SimpleCalculator; using NUnit.Framework; namespace CalculatorTest { [TestFixture] public class Class1 { public Calculator _calculator; [TestFixtureSetUp] public void Initialize() { _calculator = new Calculator(); } [Test] public void DivideTest() { int a = 10; int b = 2; int expectedValue = a / b; int actualvalue = _calculator.Divide(a, b); Assert.AreEqual(expectedValue, actualvalue,"Failure"); } } }