与MSTest相比,NUnit的速度要快多少

时间:2010-09-27 02:47:12

标签: unit-testing nunit performance mstest

The Unit Of Unit Testing 的作者Roy Osherove在博客上commented,其中有关NUnit认为做得更好的很多东西,很多其中之一更快。

我的问题是,如果有的话,速度有多快?我们在谈论一个数量级吗? 10%? 50%吗

我问这个是因为目前我无法比较这两者。我正在尝试将我的测试项目设置为dual-mode,以便我可以在它们之间切换。不幸的是,我遇到了NUnit与最新版本的Microsoft Moles集成的问题,以及NUnit is conflicting with a third party library (appears log4net related)

到目前为止,MSTest似乎在Visual Studio 2008中使用起来更加容易.NUnit的所有版本问题和兼容性问题(至少对我来说)都指导我选择MSTest作为项目的框架(尽管我可能会保留)双模式选项)。 MSTest的另一个优点是我仍然可以使用大多数NUnit断言:

using Assert = NUnit.Framework.Assert;
using Is = NUnit.Framework.Is;

但....如果NUnit的速度确实快得多,那么我宁愿使用它,尽管有痛点。

最后,VS2010的MSTest速度是否有任何提升

2 个答案:

答案 0 :(得分:6)

我花了很多时间来删除处理log4net相关问题的Microsoft Moles和生产代码,以便我可以实际比较这两者。然后我在MSTest 2008和NUnit 2.5.2中运行了测试。

我发现MSTest更好地报告了每次测试的持续时间。如果测试在NUnit中足够快,则在单击测试属性时,在TestResults.xml文件和GUI中记录为0秒。尽管如此,我试图比较所有测试速度的总和,在某些情况下NUnit更快,而在其他情况下MSTest更快。当一个比另一个快时,大约30%。

现在,NUnit肯定看起来更快的是单元测试运行之前的等待时间。当我将GUI(或控制台)连接到VS调试器并运行测试项目时,NUnit在测试可以执行之前启动和加载大约需要3-6秒。使用MSTest需要15-20秒。对于MSTest而言,如果只有一个测试或26个没关系,这个加载时间似乎是相同的。至于这些等待时间如何随着测试项目的扩大而扩大,比如在成千上万的单元测试中,我无法对差异做出评论,尽管我对此非常感兴趣。

在测试运行时,MSTest似乎也有一点延迟,可能是为了更新结果窗格。因此,我怀疑当人们说NUnit比MSTest快得多时,是因为加载和更新延迟,但实际的测试执行时间似乎非常相似。

答案 1 :(得分:2)

我已经使用了MSTest和NUnit(第一个比后者更多),我不能说我注意到他们两个关于速度的任何重大差异(不要误解我的意思,差异可能在那里,我只是没有注意到它。)

我选择MSTest的原因是它与Visual Studio的集成,因为它使得更简单。另外,一旦我遇到一些运行几个测试的问题,因为NUnit测试运行在与MSTests不同的线程公寓中。