为什么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个回答

7
在我的情况下,原因是项目调试器和测试运行器的目标构建不同。为了统一这些元素:

  1. 选择 测试 > 测试设置 > 默认处理器架构。然后选择 X64 或 X86。
  2. 选择 项目 > (您的项目)属性 > 构建 (选项卡) > 平台目标。

等它们相同之后,重新构建解决方案,然后测试方法将出现在您面前。


6

我正在使用 xUnit 2.2.0 版本。

我的问题是,我的解决方案无法找到某些 dll 文件,并且 app.config 正在尝试解决它们。但是,在 Visual Studio 的测试输出窗口中没有显示错误。

当我安装了 xunit.runner.console 并尝试通过命令行运行测试时,我才能够确定错误。

如何在 CLI 中运行 xunit 测试


5
我可以提供一个解决方案,解决了我几天前遇到的一个边缘情况。这不是适用于上述所有场景的解决方案,但对于我的边缘情况确实有效。
我使用最新的VS 2017(版本15.5.7)和XUnit 2.3.1遇到了同样的问题。已安装xunit.runner.visualstudio包,但测试未显示在VisualStudio的内置测试资源管理器中。
我正在处理一个旧项目,该项目针对.NET Framework 4.5。然而,从2.2版本开始,XUnit不支持低于4.5.2的.NET框架(请参见发布说明-XUnit 2.2:2017年2月19日
将测试项目的目标框架更改为>= 4.5.2的版本对我有用。您无需更改正在测试的项目的版本,只需更改测试项目本身即可。

3

我遇到了与VS未能发现测试方法类似的问题。在我的情况下,该方法带有静态关键字,我将其删除后,它就可以工作了。

[TestMethod]

Before: public static void Test1()

After: public void Test1()

2
我真的希望这里没有这个,因为这是关于在特定实例中找不到正确测试的问题。我有一个自问自答的问题,关于为什么xunit测试无法被发现:https://dev59.com/wGQo5IYBdhLWcg3wOtQC。我可以建议您创建一个“为什么我的MSTest测试无法被(VS)捕获”的问题。(正如您可能知道的那样,这个特定问题甚至不适用于xUnit,这也是为什么尽管它很有帮助,但您的回答不属于此处的另一个原因)。 - Ruben Bartelink
MSTest 没有找到我的测试,因为类访问修饰符是 internal。 - Abdul Saboor

3
请确保你的单元测试不是在.NET Standard 2.0类库中编写的。目前,Visual Studio Runner不支持在netstandard2.0类库中运行测试。
点击此处查看测试运行器兼容性矩阵:

https://xunit.net


两个链接都失效了。 - joelmdev

3
这也可能是由于在构建配置中,当前平台项目的构建复选框没有被勾选。单击“生成”|“配置管理器”,然后确保测试项目的构建列中有一个勾选符号,表示你正在使用的平台(例如“x86”)已被勾选。这绝对是对我有效的解决方案。

如果这篇文章在 https://dev59.com/wGQo5IYBdhLWcg3wOtQC 上,我会点赞的。因为这不是特定于xunit2的问题,而且是一个很好的检查清单元素。 - Ruben Bartelink

2

我长时间遭受这个问题的困扰。

  • 我有大约100个不同版本的项目,部署在不同的服务器上。

  • xunit从2.2.0更新到2.3.1并不能解决问题,因为构建在2.3.1中失败了。

然后我只是将xunit.runner.visualstudio更新到2.3.1,一切都开始正常工作了。 我在我的包管理器控制台中使用了这个命令来更新我的xunit.runner.visualstudio包。

Get-Project ComapanyName.ProjectName.*.Tests | Install-Package xunit.runner.visualstudio -Version 2.3.1

2

还有一个原因可能导致测试资源管理器没有显示任何测试,与Visual Studio 2017 / .NET Core引入的新便携式.pdb文件格式有关,这可能会破坏一些VS工具。 (背景:请参见错误报告“Mono.Cecil causes OutOfMemoryException with new .csproj PDBs”。)

你的测试是否因为新的便携式.pdb(调试符号)格式而无法找到?

  • Open the Output window.
  • Change drop-down selection for Show output from to Tests.
  • If you see output like to the following (possibly repeated once for each of your tests), then you've got the problem described in this answer:

    Exception System.OutOfMemoryException, Exception converting <SignatureOfYourTestMethod>
    Array dimensions exceeded supported range.
    

如果是这样,按照以下步骤解决问题:

  • 打开测试项目的 属性(在 解决方案资源管理器 中选择测试项目并按下 Alt+Enter)。
  • 切换到 生成 选项卡。
  • 点击选项卡页面末尾的 高级... 按钮。
  • 在下拉列表中选择 调试信息,选择 nonepdb-onlyfull,但不要选择 portable。正是这个设置导致测试无法被找到。
  • 单击 确定 并清理并重新生成您的项目。如果您想要更加保险,请前往测试项目的输出目录并清除所有 .pdb 文件后再次生成。现在您的测试应该恢复正常。

2
  1. 关闭所有Visual Studio实例
  2. 前往%TEMP%\VisualStudioTestExplorerExtensions\
  3. 删除与specrun相关的文件夹
  4. 重试

请告知我,谢谢。


"Original Answer" 翻译成 "最初的回答"

2

我希望我的回答能够对你们中的一些人有所帮助: 在大多数情况下,当我的单元测试无法被发现时,我不得不将测试类访问修饰符更改为public。当添加一个新类(Shift+Alt+C)时,默认访问修饰符是internal,而我大多数时候都忘记更改它。


这一系列的原因会导致它们无法在任何人的机器上运行(除了 TestDriven.net 可以部分运行),这些原因在 OP 中链接的问题中有所涉及:https://dev59.com/wGQo5IYBdhLWcg3wOtQC。 - Ruben Bartelink
请不要将“谢谢”作为答案。一旦您拥有足够的声望,您就可以投票支持有用的问题和答案。- 来自审核 - Bakar

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