unit testing,NUnit还是Visual Studio?
我使用Visual Studio(有时是resharper)来运行我的unit testing。
我听说过NUnit,但是我不知道很多…
我应该关心它吗? 它可以提供比视觉工作室更好的东西吗?
我应该使用NUnit,为什么?
与MS-Test相比,NUnit没有什么优势
- 套件属性 – 可以聚合testing并分别执行它们(例如对于具有快速和慢速testing的大型项目很有用)
- 可读Assert方法,例如
Assert.AreEqual(expected, actual)
vsAssert.That(actual, Is.EqualTo(expected))
- NUnit有频繁的版本更新 – MS-Test只有一个VS版本。
- 许多集成的运动员,包括Resharper和TestDriven.NET
- 预期的exception消息断言 – 可以在NUnit中使用属性完成,但必须在MS-Test中使用Try-Catch完成
-
[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和testrunconfig文件中隐藏(在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"); } } }