单元测试 - 扩展 Visual Studio 单元测试类型 - 不工作

Posted

技术标签:

【中文标题】单元测试 - 扩展 Visual Studio 单元测试类型 - 不工作【英文标题】:Unit Testing - Extending the Visual Studio Unit Test Type - Not working 【发布时间】:2012-11-14 01:24:11 【问题描述】:

我们被要求从 NUnit 迁移到 MSTest,现在必须将所有现有测试转换到新平台。其中大部分转换得很好,但我们在参数化测试方面遇到了问题。我们找到了以下网站,展示了如何编写扩展程序并下载了代码。

http://blogs.msdn.com/b/vstsqualitytools/archive/2009/09/04/extending-the-visual-studio-unit-test-type-part-2.aspx

然而,虽然它编译得很好,但 RowTestClass 测试都无法运行并出现以下错误消息:

“未能初始化单元测试扩展‘urn:RunAsTestClassAttribute’:未为以下属性注册单元测试扩展:Microsoft.VisualStudio.Test.Sample.UnitTestTypeExtension.RunAsSample.RunAsTestClassAttribute。”

我们使用的是 VS2010 (10.0.40219.1 SP1Rel)(Microsoft .NET Framework 版本 4.0.30319 SP1Rel)

我想知道它是否与以下库有关:

Microsoft.VisualStudio.QualityTools.Common.dll
Runtime Version: v2.0.50727

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.VisualStudio.QualityTools.Common.dll

Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
Runtime Version: v4.0.30319

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

Microsoft.VisualStudio.QualityTools.Vsip.dll
v4.0.30319

C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.VisualStudio.QualityTools.Vsip\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.QualityTools.Vsip.dll

非常感谢任何帮助使其正常工作。

【问题讨论】:

为什么需要在单元测试方法中传递参数? 基本上不必为每个测试参数重复相同的代码。它通过避免必须使用带有 if 或 switch 语句的循环之类的逻辑或创建对外部文件或数据库的依赖关系来保持代码更简洁。 我会让测试方法调用另一个接受参数并执行适当断言的非测试方法。 我知道这可以做到,但我觉得这样做有点乱。在 NUnit 中,我们有 TestCase,这是一种更简洁的参数测试方式。扩展代码应该允许 MSTest 做完全相同的事情,但不幸的是我还不能让代码工作。 不应该转移到 MSTest,因为 MSTest 并不是真正的单元测试框架 IMO。 osherove.com/blog/2011/8/24/…。我记得我试过这个,让它工作起来非常痛苦。我不得不使用 PublicAssemblies Private Assemblies 和 windows 注册表。更不用说 MSDN 论坛中的几个问题。如果我能找到这些链接,我会更新评论。如果 MS 工具支持是迁移到 MSTest 的原因,我不会担心,因为 VS2012 测试运行器支持 NUnit 以及许多其他测试框架。 【参考方案1】:

您是否注册了新类型(在Windows Registry 中)? the tutorial 中有一节介绍如何操作 - 查看行测试测试类型扩展:注册您的测试类型扩展

如果您遇到问题,请尝试从 MSDN code gallery 下载完整的代码 + 注册表项。

【讨论】:

【参考方案2】:

您可能想考虑使用SpecFlow 使您的测试更加参数化。它传统上是一个 BDD 工具,但它允许您进行可重用的带有参数的步骤。

例如你可以创建一个步骤说

"Given the user 'admin' exists."

在 c# 端,你会得到这样的方法:

[Given(@"the user '(.*)' exists"]
public void GivenTheUserExists(string name)

    //create the user

今后,您可以在任何“功能文件”中重复使用该步骤,而无需重写该步骤的实现。

【讨论】:

这如何回答原始问题?您只是在宣传 Specflow 吗? 我提供了一个看似不那么复杂的解决方案来参数化单元测试。如果那是在宣传免费工具,那么是的,我在宣传它。【参考方案3】:

请参考博文Extending Unit Tests in Visual Studio。看看你可能错过了什么。我尝试了同样的方法,它对我来说效果很好。

【讨论】:

以上是关于单元测试 - 扩展 Visual Studio 单元测试类型 - 不工作的主要内容,如果未能解决你的问题,请参考以下文章

安装Visual studio 2013并进行单元测试

Visual Studio的安装与单元测试

MVC 44.MVC 基本工具(Visual Studio 的单元测试使用Moq)

解决visual studio不能发现单元测试无法运行单元测试的方法

Visual Studio安装及单元测试

Qt:使用 Visual Studio 进行单元测试