没有vstest.console.exe发现的xunit测试

时间:2014-10-29 11:53:10

标签: c# unit-testing xunit.net vstest

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

我已经在几个dev框中成功测试了所有内容,但到目前为止,令人讨厌的测试发现在任何CI构建框上都无法正常工作。这是在添加0.99.8 xUnit测试适配器vsix(也用0.99.7测试)之后。 xUnit dll是使用2.0.0.2378 beta nuget版xUnit构建的。

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

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

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

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

2 个答案:

答案 0 :(得分:26)

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

第一步是按照here解释的内容在xunit项目中安装预发布xunit.runner.visualstudio nuget包,以便能够从Visual Studio运行xunit测试。< / p>

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

答案 1 :(得分:4)

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

  • 设置HKCU \ Software \ Outercurve Foundation \ xUnit.net \ Visual Studio Test Plugin \ MessageDisplay = Diagnostic(这应该可以通过runsettings文件进行,但是不能通过VS工具选项xunit页面获取,因为它未能打开)
  • vstest现在吐出&#39;跳过xunitTests.dll(没有引用xUnit.net)&#39;
  • 此消息实际上意味着在文件夹中找不到xunit.dll和xunit.execution.dll

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