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

时间:2012-06-07 00:51:44

标签: visual-studio-2010 gallio mspec

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

  1. 已安装的Gallio
  2. 将MSpec NuGet包添加到我的测试项目
  3. 将Gallio NuGet包添加到我的测试项目
  4. 将MSpec Gallio集成所需的三个文件复制到Gallio安装目录中的“MSpec”文件夹
  5. 写了MSpec测试
  6. 在IDE中执行“解决方案中的所有测试”
  7. 这产生了以下错误

      

    “未运行任何测试,因为未加载测试或禁用所选测试”

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

    结果

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

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

1 个答案:

答案 0 :(得分:5)

更新:现在是将MSpec集成到VS2012测试系统的项目。它可以在Visual Studio Gallerysource is on GitHub上找到。

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

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

问题1:忽略嵌套类型

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

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

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

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