【发布时间】:2012-11-14 01:24:11
【问题描述】:
我们被要求从 NUnit 迁移到 MSTest,现在必须将所有现有测试转换到新平台。其中大部分转换得很好,但我们在参数化测试方面遇到了问题。我们找到了以下网站,展示了如何编写扩展程序并下载了代码。
然而,虽然它编译得很好,但 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 以及许多其他测试框架。
标签: c# visual-studio-2010 visual-studio unit-testing vs-unit-testing-framework