16

我正在整理一组新的单元测试,作为 CI 作业一起运行。我使用 vstest.console.exe 而不是 mstest.exe 主要是因为它能够从多个框架运行测试,但现在重点是一些 xUnit dll。这些作业作为 Jenkins 管道的一部分运行。

我已经在几个开发盒上成功地测试了所有东西,但令人讨厌的是,到目前为止,测试发现在任何 CI 构建盒上都不起作用。这是在添加 0.99.8 xUnit 测试适配器 vsix(也使用 0.99.7 测试)之后。xUnit dll 是针对 4.5 和 2.0.0.2378 beta nuget 版本的 xUnit 构建的。

我已经用最简单的 dll 重现了这些症状,使用单一的公共测试方法,在我自己的盒子上运行良好,而不是在任何构建盒子上运行。部署环境非常简单,在 Windows 2012 上安装了 VS2012 和 xUnit 测试适配器。

我已经通过 vstest exe 配置文件启用了 TpTrace 日志记录,一切看起来都很好。我想我正在寻找一种方法来进一步解决问题(可能是跟踪 xUnit 发现过程)或解决问题的方法。为了简单地运行多个框架,我更愿意保留使用 vstest 控制台。

我也通过xUnit codeplex网站写了这个问题。

我已经查看了这个SO 帖子,但这里没有任何建议的解决方案有意义。

4

2 回答 2

29

找到VS2013的如何使用vstest.console.exe和xunit的解决方案花了我相当长的时间,所以我认为值得花时间在这里解释一下我是如何为大家做的......

第一步是按照此处xunit.runner.visualstudio的说明在需要它能够从 Visual Studio 运行 xunit 测试的 xunit 项目中安装预发布的nuget 包。

然后,当您运行vstest.console.exe命令时,您必须使用参数/TestAdapterPath

您的命令行应该看起来像这样(xunit 适配器的路径在这里是相对的,因此您可以将其置于绝对路径或根据活动目录进行调整):

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" c:\path\to\your\assembly.to.test.dll /TestAdapterPath:".\packages\xunit.runner.visualstudio.0.99.9-build1021\build\_common\"

编辑:因为适配器 dll 被复制到输出文件夹,我们可以简化命令行,给出路径“。” /TestAdapterPath选项:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" c:\path\to\your\assembly.to.test.dll /TestAdapterPath:"."

有关信息,它也适用于 NUnit、nuget 包NUnitTestAdapter和命令:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" c:\path\to\your\assembly.to.test.dll /TestAdapterPath:"."
于 2015-01-08T16:10:25.037 回答
5

好的,问题解决了,但是经过一些令人沮丧的故障排除后,我将介绍它以防它对某人有用。问题是 xunit.execution.dll 在包含测试的 dll 所在的文件夹中不可用。这是 xunit 发现所必需的。我只是通过以下方式到达这里的:

  • 设置 HKCU\Software\Outercurve Foundation\xUnit.net\Visual Studio Test Plugin\MessageDisplay = 诊断(这应该可以通过 runsettings 文件实现,但没有被选中,并且不能通过 VS 工具选项 xunit 页面实现,因为它无法打开)
  • vstest 现在吐出“跳过 xunitTests.dll(不引用 xUnit.net)”
  • 此消息实际上意味着在文件夹中找不到 xunit.dll 和 xunit.execution.dll

通过确保将 dll 复制到构建框上的该文件夹中解决了问题。

于 2014-10-30T07:21:00.727 回答