为什么Visual Studio 2015/2017/2019的测试运行程序无法发现我的xUnit v2测试?

205

更新:添加了2019年说明;发现/运行器集成机制与2017年和2015年相同,因此可能出现问题的关键事项也相同。


我已经阅读了为什么xUnit运行器找不到我的测试,其中涵盖了xUnit永远无法找到您的测试的原因,但我的问题不同——我相信我的测试没有任何微妙的问题;(它们在其他环境中有效,这似乎只是我的机器)——Visual Studio 2015 [Community Edition]中的Visual Studio测试运行程序根本没有显示任何我的测试。我没有做任何令人兴奋的事情;测试目标是桌面上的xUnit.net v2。
我查看了输出窗口,在显示输出来源选项卡下的测试中根本没有看到任何内容。

为什么xUnit运行器找不到我的测试? 相关链接:https://dev59.com/wGQo5IYBdhLWcg3wOtQC - Ruben Bartelink
1
这只是一个可能的问题,但显然你必须在测试资源管理器中显示之前编译测试项目。 - Niklas Peter
相关:https://dev59.com/D10b5IYBdhLWcg3wJ-Qy#29589576 - Ruben Bartelink
安装 Xunit.execution.desktop 解决了我的问题。 - Renju
6
我曾经遇到这个问题,是因为我忘记将我的新测试类设为公共的。 - Divan
显示剩余2条评论
41个回答

239
  1. 消除探测异常:转到输出窗口 (Ctrl-Alt-O),然后切换“显示输出来源”下拉菜单 (Shift-Alt-S) 到 Tests 并确保没有探测异常。

  2. Test|测试设置|默认处理器架构 可以帮助解决测试针对 x86/x64 的情况,而探测则会触发位数相关的异常,即不是 AnyCpu

  3. 如此回答建议(如果技术有所帮助,请点赞)运行桌面控制台运行程序(说明) 可以作为一个良好的交叉检查来消除其他可能性,例如损坏的配置文件:

> packages\xunit.runner.console.2.2.0\tools\xunit.console <tests.dll>

注意: xunit.runner.console 包已被弃用-当您在VS中可以运行它们时,您将能够让dotnet test 在CI上下文中运行它们。


请阅读文档 - 它是全面的,最新的,包括故障排除信息并接受PR:

重要提示:如果您之前安装了xUnit.net Visual Studio Runner VSIX(扩展),则必须先卸载它。Visual Studio runner现在只通过NuGet分发。要删除它,请转到工具>扩展和更新。滚动到列表底部,如果安装了xUnit.net,则卸载它。这将强制您重新启动Visual Studio。

如果您无法发现或运行测试,则可能是Visual Studio内部的受损运行程序高速缓存的受害者。要清除此缓存,请关闭所有Visual Studio实例,然后删除文件夹%TEMP%\VisualStudioTestExplorerExtensions。还要确保您的项目仅针对Visual Studio runner NuGet包的单个版本进行链接(xunit.runner.visualstudio)。

以下步骤对我有效:

  1. (仅当您怀疑您的机器存在严重问题时才需要-通常情况下,常见情况是尚未安装Visual Studio集成)

按建议做 DEL %TEMP%\VisualStudioTestExplorerExtensions

PS> del $env:TEMP\VisualStudioTestExplorerExtensions
  1. Install the NuGet Package xunit.runner.visualstudio in all test projects

    • Paket:

        .paket\paket add nuget xunit.runner.visualstudio -i
      

      You need to end up with the following in your paket.dependencies:

      nuget xunit.runner.visualstudio version_in_path: true
      

      Note the version_in_path: true bit is important

    • Nuget: Go to Package Manager Console (Alt-T,N,O) and

      Install-Package xunit.runner.visualstudio
      

    Rebuild to make sure xunit.runner ends up in the output dir

  2. Close Test Explorer <- this was the missing bit for me

  3. Re-open Test Explorer (Alt-S,W,T)

  4. Run All tests (Ctrl R, A)


12
“Close Test Explorer <- this was the missing bit for me” 的翻译是:“关闭“测试资源管理器”<- 这就是我遗漏的关键步骤。”这是我也错过的最重要的一步,花了我5个小时才弄明白。谢谢提醒,我应该注意这些步骤 :) ” - Esen
1
xunit VS运行器曾经在我的sln上工作。然而,有一天它突然不再显示了。后来发现我没有安装VS运行器,之前因为其他已安装了运行器的sln留下的缓存可能导致它正常工作。安装了运行器后,一切又恢复正常了。所以别忘了为每个sln安装运行器。 - ZZZ
1
这真是不可思议。删除了一个文件夹,里面有三个空文件夹,居然解决了问题。 - t3chb0t
1
@martinJH,我已经为此自己回答了一个问题(在原帖中链接):https://dev59.com/wGQo5IYBdhLWcg3wOtQC ;) 不过我不会透露我是如何发现这个问题的。 - Ruben Bartelink
3
非常奇怪,但删除 %TEMP%\VisualStudioTestExplorerExtensions 文件夹并重新启动 VS 最终解决了问题! - Hinrich
显示剩余11条评论

39

以上的解决方法都不能解决我的问题(dotnetcore 1.1,VS2017)。以下是修复方法:

  1. 添加NuGet包 Microsoft.TestPlatform.TestHost
  2. 添加NuGet包 Microsoft.NET.Test.Sdk

这些包需要在之前安装的包之上额外添加

  • xunit (2.3.0-beta1-build3642)
  • xunit.runner.visualstudio (2.3.0-beta1-build1309)

11
这对我很有帮助,我缺少了 xunit.runner.visualstudio 包。 - Ognjen Babic
我的.NET 4.72 MS测试项目只有在从VS 2017迁移到VS 2019时才需要TestPlatform.TestHost - ΩmegaMan
这对我解决了问题。在输出窗口中,从下拉菜单中选择 Tests => 查看“缺少 TestHost”消息。 - datchung
Microsoft.NET.Test.Sdk 对我很有效。我不需要添加 Microsoft.TestPlatform.TestHost。 - KrimblKrum

36

在将测试项目的 CPU 更改为 x64 后,我不得不更改测试设置。然后重新检测到了测试。

架构


你在测试发现输出中之前看到过一条消息吗? - Ruben Bartelink
没有,我没看到任何错误,花了一段时间才解决。 - Max
嗯,奇怪(请参见我的答案顶部 - 它解释了要查找的位置;通常会被标记(尽管有些情况下根本没有任何消息)) - Ruben Bartelink
这对我解决了问题。我不知道为什么会有帮助,但它确实有效。 - VSO
3
更改后,我必须进行清洁-->重建。 - user2023861

28

为测试项目安装xunit.runner.visualstudio


已经安装了,但通过NuGet升级版本后,它又可以正常工作了。 - Alex Ayscough
精确的解决方案,适用于VS 2019。 - lyolikaa
也适用于VS 2022。 - foyss

25

请确保你的测试类是公共的(public)


这个问题在第一个规定中明确解决了(我链接到另一个涵盖该情况的问题);这个问答只是关于如何排除通常在其他地方工作但现在在特定环境中不起作用的测试问题。对我来说,这个答案只会让事情更加混乱,因为它模糊了这种区别。 - Ruben Bartelink

15

请按照以下步骤操作:

  1. NuGet 包管理器 更新您的 MsTest.TestAdapterMsTest.TestFramework dll 文件。
  2. 清理解决方案。
  3. 构建您的解决方案。

1
你能否打开这个问题的克隆并自我回答,就像我所做的那样?这个问题是关于xUnit v2及更高版本的。即使是xUnit v1的答案也不适用于这里。你可以在问题的顶部使用“参见”链接到它,或者我可以在问题中链接到它。 - Ruben Bartelink
这个解决方案有效。否则每次我都得删除%TEMP%\VisualStudioTestExplorerExtensions,有时还得从控制台运行测试。 - Venkata Dorisala
我正在使用NUnit,通过NuGet更新NUnit3TestAdapter到最新版本解决了这个问题。 - dpberry178
谢谢您的帮助 - 在我的情况下,只需要运行Update-Package -reinstall MSTest.TestAdapter命令,测试就被识别了。 - Rob

11

在使用ASP Core项目和xUnit 2.2.0时,我一直在苦苦挣扎。对我来说解决方法是添加对Microsoft.DotNet.InternalAbstractions的引用。

我发现这一点是在尝试手动使用dotnet test运行测试项目失败并报告了InternalAbstractions缺失时发现的。当自动发现失败时,我没有在测试输出窗口中看到此错误。我在发现窗口中看到的唯一信息是返回代码,这当时对我来说毫无意义,但事后想来,可能表示了一个错误。


但报告了一个有用的错误...是什么?此外,您能否验证它绝对没有列在发现错误窗口中,如OP所述 - 即您可以自信地陈述“我已查看输出窗口,并且在“测试”下的“从选项卡显示输出”中根本没有看到任何内容。”? - Ruben Bartelink
1
请查看更新的答案,如果相关的话,我稍后会发布返回代码信息。 - Tom Makin

11

我也遇到过几次这种情况 - 当我清理项目并重新构建时,它通常会正常运行。


当您在下拉菜单中选择了“测试”,并查看输出窗口时,是否有任何显著的消息? - Ruben Bartelink
3
完全没有,它只是说未发现任何测试。 - Liam
在我的情况下,测试资源管理器卡在了之前失败的测试上。如果我浏览到它并尝试右键单击->运行或任何其他操作,整个VS都会挂起。只需进行清理和重建即可清除测试状态并为我解决问题。 - Piedone
我可以补充一点,简单地构建(即F6)是不会有帮助的,您需要右键单击VS解决方案资源管理器中的解决方案,然后单击重新生成解决方案。 - Piedone

10

我曾经遇到过Visual Studio 2019同样的问题。只需安装以下NuGet软件包,问题即可得到解决:

1). xUnit

2). xunit.runner.visualstudio

3). Microsoft.TestPlatform.TestHost

4). Microsoft.NET.Test.Sdk


8
在花费了两天时间后,以上所有方法都没有解决我的问题。唯一的“解决方案”是:转到项目属性 -> 构建选项卡。然后点击窗格右下角的高级按钮。将“调试信息:”更改为“完整”,然后单击“确定”。
以下是屏幕截图: enter image description here enter image description hereenter image description here

1
听起来很痛苦。感谢分享,希望能帮到某个人的一天。然而,我必须说:我无法想象调试信息级别会影响发现过程,所以我只能说“我不认为那是真正射击熊的原因” - 但愿我错了 ;) - Ruben Bartelink
@RubenBartelink,我完全同意你的观点,这就是为什么我在引用中提到了“解决方案”的原因 :) 但有趣的是,一旦我这样做了,它马上就奏效了。 - curiousBoy
1
非常感谢。这也是我的解决方法 :) - Babulaas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接