我正在使用Visual Studio(有时是harshaper)来运行我的单元测试。
我听说过NUnit,但我对此并不了解...
我应该在乎吗?它可以提供比Visual Studio更好的东西吗?
我应该使用NUnit吗?为什么?
我正在使用Visual Studio(有时是harshaper)来运行我的单元测试。
我听说过NUnit,但我对此并不了解...
我应该在乎吗?它可以提供比Visual Studio更好的东西吗?
我应该使用NUnit吗?为什么?
Answers:
NUnit与MS-Test相比没有什么优势
Assert.AreEqual(expected, actual)
vsAssert.That(actual, Is.EqualTo(expected))
[TestCase]
!NUnit允许进行参数化测试。从我当前的角度来看(经过8个月的开发,平均大约有10个开发人员),出于以下原因,我建议不要使用MSTest
换句话说,如果我必须在8个月前再次做出决定,我可能会选择NUnit。我可能没有集成的测试结果报告,但是开发人员将拥有更加无缝的测试体验。
这是我对MS Test的经验
另外:我们现在还有更多测试,甚至无法说出多少。由于OutOfMemoryExceptions和其他不稳定问题,不可能再从Visual Studio中全部运行它们。我们从脚本运行测试。在Visual Studio中查看测试结果会很容易,但是当打开解决方案时,VS会崩溃(每次)。因此,我们需要使用文本搜索来搜索失败的测试。集成工具不再具有优势。
另一个更新:我们现在正在使用VS 2013。很多事情发生了变化。自从我们开始以来,他们第三次重写了MS Test测试运行程序。这引起了很多重大变化,但是没有一个新版本做得更好。我们很高兴我们没有使用MS Test的精美功能,因为它们不再受支持。真是可惜。我们仍在使用脚本来构建和运行所有单元测试,因为它更方便。Visual Studio需要几分钟来开始运行测试(编译后直到第一次测试开始为止的时间度量)。他们可能通过更新来修复它,这可能是我们项目的特定问题。但是,在运行相同的测试时,Resharper的速度要快得多。
结论:至少与Resharper结合使用,MS Test很有用。我希望他们最终能知道应该如何编写测试运行程序,并且在下次更新Visual Studio时不会进行这种重大更改。
NUnit可以与Visual Studio 结合使用。它是一个框架,而不是单独的程序。因此,您可以关心是否适合您:)。
替代文字http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802
“安装插件后,您将在工具菜单下找到一个新的子菜单。”
有关导入它的更多信息,请参见http://nunitit.codeplex.com/。
此外,使用SO可以找到很多东西。例如,本主题列出了NUnit相对于MS标准测试的优势。
与NUnit相比,MS-Test的最大优势是MS-Test可以使用反射生成模拟对象。我发现它非常有用
我不确定其他人,但是NUnit提供了不错的GUI和控制台来运行您的单元测试,并且您还可以生成NUnit Test执行结果的报告,该报告将详细说明测试是否失败或通过以及何时进行测试参加单元测试
NUnit是一个单元测试框架,resharper也支持该框架。我认为您使用的是Microsoft的单元测试框架,因此NUnit只是Microsoft产品的替代方案;)
这是NUnit主页的链接:http : //nunit.org
在NUnit中,测试不是并行执行的。相反,似乎所有测试都在单个线程上执行。在MSTest中,每个测试都在单独的线程上实例化,这导致运行被交错。因此,如果测试A成功依赖于测试B,则它很可能会失败,因为测试B可能会随着测试A的运行而开始运行。
如果使用的是Visual Studio,则必须使用NUnit进行单元测试;如果运行的是Java(Netbeans),则必须使用JUnit进行单元测试。
这是一个简单的计算器单元测试的示例
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");
}
}
}