vstest.console.exe未发现任何xunit测试

本文关键字:xunit 测试 任何 未发现 console exe vstest | 更新日期: 2023-09-27 18:28:19

我正在构建一个新的单元测试堆栈,作为CI作业一起运行。我使用vstest.console.exe而不是mstest.exe,主要是因为它能够从几个框架中运行测试,但现在的重点是几个xUnit dll。这些作业是作为詹金斯管道的一部分运行的。

我已经在几个开发框上成功地测试了所有内容,但令人恼火的是,到目前为止,测试发现还没有在任何CI构建框上工作。这是在添加了0.99.8 xUnit测试适配器vsix(也使用0.99.7进行了测试)之后进行的。xUnit dll是针对4.5使用2.0.0.2378测试版的xUnit构建的。

我用最简单的dll复制了症状,用一个公共测试方法,在我自己的盒子上工作得很好,不在任何构建盒子上工作。部署环境非常简单,在Windows 2012上安装了VS2012和xUnit测试适配器。

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

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

我已经查看了这篇SO文章,但没有一个建议的解决方案在这里有意义。

vstest.console.exe未发现任何xunit测试

我花了很长时间才找到如何在VS2013中使用vstest.console.exe和xunit的解决方案,所以我认为值得花时间在这里解释我是如何为每个人做的。。。

第一步是按照这里解释的内容,在需要它的xunit项目中安装预发布的xunit.runner.visualstudio-nuget包,以便能够从Visual Studio运行xunit测试。

然后,当您运行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'"

edit:因为适配器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:"."

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

  • 设置HKCU''Software''Outercurve Foundation''xUnit.net''Visual Studio测试插件''MessageDisplay=Diagnostic(这应该可以通过runsettings文件实现,但没有被提取,也不能通过VS工具选项xUnit页面实现,因为它无法打开)
  • vstest现在抛出"正在跳过xunitTests.dll(没有引用xUnit.net)"
  • 此消息实际上意味着在文件夹中找不到xunit.dll和xunit.execution.dll

通过确保dll被复制到生成框上的文件夹中来解决问题。