48

我们必须决定使用哪种技术进行单元测试。目前我们使用 Visual Studio 2010,并且对附带的 MSTest 不满意。它有缺陷,部署不佳(例如无法正确识别测试设置输出目录),并且在尝试测试 32 位和 64 位版本的程序集时存在一些问题。更糟糕的是,MSTest 与我们的 Jenkins 构建系统没有很好的阻抗匹配。因此,我们考虑迁移到 NUnit。但是,我们团队中没有人对 NUnit 有很好的了解。此外,我们将很快进入 Visual Studio 2012。

我需要知道 Visual Studio 2012 MSTest vs Nunit 最新版本的优缺点。由于大多数关于堆栈溢出的文章都与旧版本的 VS 相关,因此与我们无关。我猜微软自 2010年以来改进MSTest

4

5 回答 5

27

我现在同时使用 MSTest 和 NUnit。恕我直言 NUnit 仍然是一个更好的解决方案。如果您有 Visual Studio 2012 高级版,那么它实际上非常好,除了您似乎无法将测试组合在一起这一事实。我喜欢它集成到 Visual Studio 中的事实,但缺乏分组以及无需手动选择即可运行测试子集的能力是一个大问题。

Premium 中的覆盖率分析也非常简洁。它速度很快,可以快速为您提供所需的东西。这是一个高级功能。

由于 MSTest 中仍然缺少功能(甚至自 vs2010 以来已删除功能),我仍然建议使用 NUnit 进行单元测试。好处包括按命名空间进行测试分组,添加测试用例注释的能力(使用不同的参数多次运行相同的测试),并且它与 Opencover 和报告生成器一起用于覆盖分析。主要引用的缺点是它不像 MSTest 那样集成,所以它真的取决于对你来说这是否是一个缺点有多重要。

于 2013-02-13T14:05:03.680 回答
10

@Biranchi:您在 Visual Studio 2012(及更高版本)中使用哪个单元测试框架不再重要。请在此处查看我的博文,这是您所指的那篇的续集。 http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/20/part-2-using-traits-with-different-test-frameworks-in-the-unit-test-explorer.aspx

你甚至可以混合和匹配来自不同框架的测试,你甚至可以做到方法级别!
这意味着您甚至可以将遗留代码从一个转移到另一个,而不会产生不良副作用。

另请参阅此内容,了解如何使用 Nuget 将 NUnit 适配器安装到解决方案中,让开发人员可以自行安装。 http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/11/part-3-unit-testing-with-traits-and-code-coverage-in-visual-studio-2012-using- the-tfs-build-and-the-new-nuget-adapter-approach.aspx

@Sriwantha:MSTest 是一个比 NUnit 更简单的框架。NUnit(以及 XUnit)为您提供了更大的灵活性,这也导致编写的代码更少。一个例子:如果你正在使用类别(你应该),MSTest 需要一个类别来装饰每个方法。NUnit 允许您装饰类 - 这将对该类中的所有方法生效。NUnit 还允许您使用强类型类别

public class Integration : Category {}

这足以声明一个您可以使用的类别,而不是

Category("Integration");

你冒着拼写错误的风险。

NUnit 对数据驱动测试有更好的支持。NUnit 也支持理论

仅举几例。

于 2013-08-23T12:51:55.693 回答
1

如果您有“更新 1”或更高版本,VS2012 确实允许将测试分类:http: //msdn.microsoft.com/en-us/library/hh270865.aspx#BKMK_Grouping_and_filtering_the_test_list

于 2013-05-22T15:47:16.970 回答
1

您是否研究过 VS 的 Traits 功能? http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/09/how-to-manage-unit-tests-in-visual-studio-2012-update-1-part-1-using-特征单元测试explorer.aspx

与 nunit 相比,mstest(2012 更新 1)中的分组要好得多。

于 2013-06-09T10:27:40.290 回答
0

这里还要补充一件事。看起来 MSTEST 引擎在某些情况下不能很好地与 TFS Build 配合使用。如果您使用的是 TFS 构建,它不会报告跳过的测试(标有 Ignore 属性)。它只会包括 Assert.Inconclusive。如果这是一个问题,您应该使用 NUnit 而不是 MSTest。

于 2014-02-12T16:01:52.577 回答