如何使用Gallio在Visual Studio的测试系统中运行MSpec?

Ric*_*lay 4 gallio visual-studio-2010 mspec

我正在尝试使用Gallio在Visual Studio的测试系统中运行MSpec测试,但它似乎忽略了IDE中的MSpec插件.我做了什么:

  1. 安装了Gallio
  2. 在我的测试项目中添加了MSpec NuGet包
  3. 在我的测试项目中添加了Gallio NuGet包
  4. 将MSpec Gallio集成所需的三个文件复制到Gallio安装目录中的"MSpec"文件夹
  5. 写了MSpec测试
  6. 在IDE中执行"解决方案中的所有测试"

这产生了以下错误

"没有运行任何测试,因为没有加载测试或禁用了选定的测试"

为了检查Gallio本身,我添加了对MbUnit的引用并创建了一个简单的MbUnit测试.我还运行了Gallio的其他工具来检查插件是否被拾取.我甚至重新启动了VS.

结果

运行测试使用Gallio.EchoGallio.Icarus成功执行都MbUnit的和MSpec测试,所以这个插件被拾起.从Visual Studio运行测试运行MbUnit测试但不运行MSpec测试,因此Gallio集成似乎正在运行(而不是MSpec插件).有什么想法吗?

在任何人提到它之前:是的,我宁愿使用ReSharper,但目前我的情况不是许可证.

Ric*_*lay 5

更新:现在是将MSpec集成到VS2012测试系统的项目.它可以在Visual Studio库中找到,源代码在GitHub上.

在开始使用两个项目的源调试问题之后,似乎有两个潜在的问题导致MSpec和Gallio的VS runner之间的不兼容.但是,这两个问题都源于VS运行程序使用Cecil从程序集加载类型信息这一事实(可能是为了避免将测试程序集加载到主VS AppDomain中).

当我发现更多时,我会更新这个答案(希望导致一个或多个补丁来解决问题).

问题1:忽略嵌套类型

我一直在使用嵌套类型进行测试(SubjectSpec+when_something),Gallio的VS跑步者使用基于Cecil的反射忽略了这些类型,以避免将测试程序集加载到app域中.

这最终是一个相对简单的修复,我已经作为Gallio开发人员的补丁提交了.如果/当我确认哪个版本将成为其中的一部分,我将更新此答案.

问题2:MSpec导致"调用测试驱动程序时发生异常"

如果删除容器类型以避免问题1,则MSpec会抛出此错误.原因是MSpec正在尝试创建测试对象的实例,但是Gallio只提供了一个实际上无法创建的包装器 Type对象.