单元测试,NUnit或Visual studio?

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

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

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

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

回答(10)

2 years ago

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

  • Suite属性 - 可以聚合测试并单独执行它们(例如,对于具有快速和慢速测试的大型项目非常有用)

  • 可读断言方法,例如 Assert.AreEqual(expected, actual) vs Assert.That(actual, Is.EqualTo(expected))

  • NUnit经常更新版本 - 每个VS版本只有一个MS-Test .

  • 许多综合跑步者,包括Resharper和TestDriven.NET

  • 预期的异常消息断言 - 可以使用NUnit中的属性完成,但必须在MS-Test中使用Try-Catch完成

  • [TestCase] ! NUnit允许参数化测试 .

2 years ago

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

  • 框架本身很慢 . 我不在你的控制范围内 . 我的意思是运行这些测试的框架很慢,无论是运行测试套件,单个测试等 .

  • 需要保留一个Test-Metadata文件,当几个开发人员正在处理它时,它总是会导致复杂化(重新创建例如元数据等) . 每个其他测试套件都不需要元数据文件 . 组织测试很好,但是你可以通过名称空间,类和方法名称实现相同的功能 .

  • 执行持续集成,如果要在构建计算机上运行单元测试,则需要在该计算机上安装Visual Studio .

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

2 years ago

这是我对MS Test的体验

  • 我们正在运行MS测试,大约有3800测试 .

  • 测试只需要很长时间才能开始执行,这在运行单个测试时很痛苦 .

  • 执行测试大约需要1GB内存 . 不,这不是由于我们的测试中的内存泄漏 . 我们经常遇到OutOfMemoryExceptions .

  • 因为它使用了那么多资源,我们开始从批处理文件中执行测试 . 那么整个集成有什么用呢?

  • 它有缺陷且不稳定:

  • 例如,如果从测试中删除[忽略]属性,则它无法识别它,因为它会在某处缓存有关测试的信息 . 您需要刷新测试列表,有时可以解决问题,或重新启动VS.

  • 它随机不会将引用程序集复制到该目录 .

  • 部署项目(要使用的其他文件)无法正常工作 . 它们被随机忽略 .

  • 在vsmdi和testrunconfig文件中隐藏(在测试代码中不可见)信息 . 如果你不关心它,它可能不起作用 .

  • 在功能上它可能与NUnit相当,但如果你考虑使用VS测试版,这是非常昂贵的 .


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


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

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

2 years ago

可以使用NUnit in combination 与视觉工作室 . 它是一个框架而不是一个单独的程序 . 所以你可以关心看看它是否适合你:) .

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

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

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

此外,使用搜索SO可以找到很多 . 例如,This topic列出了NUnit优于MS标准测试的优点 .

2 years ago

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

2 years ago

NUnit适用于VS的标准版 .

2 years ago

我不确定其他人,但NUnit提供了很好的GUI和控制台来运行你的单元测试,你也可以生成NUnit测试执行结果的报告,这将给出测试失败或通过的详细信息以及它的时间参加你的单元测试

2 years ago

NUnit是一个单元测试框架,resharper也支持它 . 我认为您使用的是Microsoft的单元测试框架,因此NUnit只是Microsoft产品的替代品;)

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

2 years ago

NUnit中,测试不是并行执行的 . 相反,似乎所有测试都在单个线程上执行 . 在MSTest中,每个测试都在一个单独的线程上实例化,这会导致运行交错 . 因此,如果测试A依赖于测试B的成功,它可能会失败,因为测试B可能会在测试A运行时开始运行 .

2 years ago

如果您使用的是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");

        }
    }
}