繁体   English   中英

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

[英]Why is the Visual Studio 2015/2017/2019 Test Runner not discovering my xUnit v2 tests

更新:添加 2019; 发现/运行器集成机制与 2017 和 2015 相同,因此可能出错的关键问题是相同的。


我已经阅读了为什么 xUnit 运行程序找不到我的测试,这涵盖了 xUnit永远无法找到您的测试但我的问题不同的原因- 我相信我的测试没有任何微妙之处; (他们在其他环境中工作过,这似乎只是我的机器) - Visual Studio 2015 [社区版] 中的 Visual Studio 测试运行程序根本没有显示我的任何测试。 我没有做任何令人兴奋的事情; 测试针对桌面上的 xUnit.net v2。

我查看了“输出”窗口,但在“显示选项卡的输出”中的“测试”下根本看不到任何内容。

  1. 从您的查询中消除发现异常; 转到输出窗口 (Ctrl-Alt-O),然后将显示输出从下拉 (Shift-Alt-S) 切换到测试并确保没有发现异常

  2. 测试|测试设置|如果您的测试是特定于 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 运行程序现在仅通过 NuGet 分发。 要删除它,请转到Tools > Extensions and Updates 滚动到列表底部,如果安装了 xUnit.net,请将其卸载。 这将强制您重新启动 Visual Studio。

如果您在发现或运行测试时遇到问题,您可能是 Visual Studio 中损坏的运行程序缓存的受害者。 要清除此缓存,请关闭 Visual Studio 的所有实例,然后删除文件夹%TEMP%\VisualStudioTestExplorerExtensions 还要确保您的项目仅链接到 Visual Studio 运行程序 NuGet 包 ( xunit.runner.visualstudio ) 的单个版本。

以下步骤对我有用:

  1. (仅当您怀疑您的机器上存在严重混乱时 - 通常更常见的情况是尚未安装 Visual Studio 集成)

按照建议执行DEL %TEMP%\VisualStudioTestExplorerExtensions :-

PS> del $env:TEMP\VisualStudioTestExplorerExtensions
  1. 在所有测试项目中安装 NuGet 包xunit.runner.visualstudio

    • 包:

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

      您需要在paket.dependencies中完成以下内容

       nuget xunit.runner.visualstudio version_in_path: true

      注意version_in_path: true位很重要

    • Nuget:转到包管理器控制台(Alt-T、N、O)和

      Install-Package xunit.runner.visualstudio

    重建以确保xunit.runner在输出目录中结束

  2. 关闭测试资源管理器<- 这对我来说是缺失的部分

  3. 重新打开测试资源管理器 (Alt-S,W,T)

  4. 运行所有测试 (Ctrl R, A)

上述解决方案都不适合我(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)

将测试项目 CPU 更改为 x64 后,我不得不更改测试设置。 然后再次检测到测试。

建筑学

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

确保您的测试类是public

请按照以下步骤操作:

  1. nugget package manager更新您的MsTest.TestAdapterMsTest.TestFramework dll's
  2. 清洁您的解决方案
  3. 构建您的解决方案。

在使用 ASP Core 项目和 xUnit 2.2.0 时,我整个下午都在为此苦苦挣扎。 我的解决方案是添加对Microsoft.DotNet.InternalAbstractions的引用

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

这发生在我身上几次 - 当我清理项目并再次构建它时,它往往会很好。

我在使用 Visual Studio 2019 时遇到了同样的问题。刚刚安装了以下 NuGet 包,问题就解决了。

1)。 xUnit

2)。 xunit.runner.visualstudio

3)。 Microsoft.TestPlatform.TestHost

4)。 Microsoft.NET.Test.Sdk

花了 2 天后......以上都不适合我。 唯一的“解决方案”是:转到项目属性-> 构建选项卡。 然后单击窗格右下角的高级按钮。 将“调试信息:”更改为“完整”,然后单击“确定”。

以下是屏幕截图: 在此处输入图像描述

在此处输入图像描述 在此处输入图像描述

就我而言,原因是项目调试器和测试运行器之间的目标构建不同。 统一这些元素:

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

在它们相同后,重新构建您的解决方案,然后将为您显示测试方法。

我正在使用 xUnit 2.2.0。

我的问题是我的解决方案无法找到某些 dll,而app.config正在尝试解决它们。 该错误未显示在 Visual Studio 的测试输出窗口中。

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

如何在 CLI 中运行 xunit 测试

我可以为几天前遇到的边缘情况提供解决方案。 它不会是适合上述所有场景的解决方案,但是,对于边缘情况,我已经修复了它。

我在最新的 VS 2017(版本 15.5.7)和 XUnit 2.3.1 中遇到了同样的问题。 xunit.runner.visualstudio 包已安装,但是测试并未显示在 VisualStudio 的内置测试资源管理器中。

我正在处理一个针对 .NET 框架 4.5 的遗留项目。 但是,从 2.2 版开始。 XUnit 不支持低于 4.5.2 的 .NET 框架(请参阅发行说明 - XUnit 2.2:2017 年 2 月 19 日

将测试项目的目标框架更改为 >= 4.5.2 对我有用。 您不必更改正在测试的项目版本,只需更改测试项目本身即可。

遇到与 VS 未发现测试方法类似的问题。 在我的情况下,我在方法中使用了 static 关键字,我删除了它并且它起作用了。

[TestMethod]

Before: public static void Test1()

After: public void Test1()

这也可能是由于构建配置中当前平台项目的构建复选框未选中。 点击构建 | 配置管理器,然后确保测试项目在您正在使用的平台的构建列中有一个勾号(例如“x86”)。

这绝对是对我有用的解决方案。

请确保您没有在 .NET Standard 2.0 类库中编写单元测试。 在撰写本文时,visualstudio 运行程序不支持在 netstandard2.0 类库中运行测试。

在此处查看测试运行器兼容性矩阵:

https://xunit.net

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

是否因为新的可移植.pdb (调试符号)格式而找不到您的测试?

  • 打开输出窗口。
  • Show output 的下拉选择从更改为Tests
  • 如果您看到如下输出(可能对每个测试重复一次),那么您就遇到了此答案中描述的问题:

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

如果是,请执行以下操作来解决问题:

  • 打开测试项目的属性(在解决方案资源管理器中选择测试项目并按Alt + Enter )。
  • 切换到构建选项卡。
  • 单击“高级...”按钮(位于该标签页的最末端)。
  • 在标记为Debugging information的下拉列表中,选择nonepdb-onlyfull ,但NOT portable 正是这最后一个设置导致无法找到测试。
  • 单击确定并清理并重建您的项目。 如果您想更加确定,请转到您的测试项目的输出目录并在重建之前清理所有.pdb文件。 现在你的测试应该回来了。

就我而言,我在解决方案中有 2 个不同的测试项目。 可以找到项目 1 的测试,但找不到项目 2 的测试。 我发现首先卸载测试项目 1,然后关闭 VS > 清除我的临时文件 > 重新打开解决方案 > 重建,允许 VS 发现我的项目 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
  1. 关闭所有 Visual Studio 实例
  2. 转到 %TEMP%\VisualStudioTestExplorerExtensions\
  3. 删除 specrun 相关文件夹
  4. 再试一次

让我知道,谢谢

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

对我来说,最常见的罪魁祸首是 Visual Studio 试图使用与其测试的库不同的架构来运行测试。 不幸的是,有多个地方似乎会出错。

在 VS 2017 中,尝试在您的测试项目中创建一个运行设置文件,例如Default.runsettings 如果您的主库是 x64,则内容应为:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <RunConfiguration>
    <TargetPlatform>x64</TargetPlatform>
  </RunConfiguration>
</RunSettings>

然后从测试 -> 测试设置 -> 选择测试设置文件中选择此文件。

然后,在测试 -> 测试设置,默认处理器架构下,再次选择正确的架构。

请务必清理并构建整个解决方案。 您可能需要关闭并重新打开测试资源管理器窗口。 在 Output -> Test 窗口中查找任何其他错误,以获取有关不正确架构类型的更多线索。

仅供参考,可以在此处找到其他测试设置条目。

当我在 VS 2017 中使用 IntelliTest 进行第一次步行尝试时,这件事发生在我身上。

有时,当 IntelliTest 自动创建测试项目时,程序集引用Microsoft.ExtendedReflection ( ...\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\Pex\Microsoft .ExtendedReflection.dll )丢失。 添加后,生成的测试将在重新编译后显示在测试资源管理器中。

免责声明:这与带有 Visual Studio 2015 的 xunit 无关,而是带有 UWP 单元测试应用程序 (MSTest) 的 Visual Studio 2017。 我到这个线程搜索同样的事情,所以也许其他人会做同样的事情:)

我的解决方案是更新 MSTest.TestAdapter 和 MSTest.TestFramework 的 nuget 包。 似乎当您为 UWP 创建单元测试应用程序时,您不会自动获得最新版本。

通过安装 nuget xunit.runner.visualstudio 解决了我的问题

在我的情况下,我在同一个解决方案中有多个测试项目,只有一个项目没有显示“测试资源管理器”

我通过右键单击解决方案转到“管理解决方案的 Nuget 包”。

我注意到在“合并”选项卡下有一些“测试”nuget 包在项目之间不同步。 我点击了“安装”,我丢失的测试出现了。

我尝试了上面的大部分建议,但没有任何效果。 就我而言,我在一个团队中,并且正在为其他开发人员提供相同解决方案的测试。 所以,我试图删除我的 .vs 文件夹,但也没有运气。

我最终完全删除了我的本地文件夹并重新克隆了 repo。 这为我解决了它。

这是对我们有用的解决方案。 不是最好的,但也许可以受益。

背景:

  • 我们的脚本是使用 VS 2013 开发的,并使用 NUnit VS Adapter 2.1..
  • 最近我们迁移到 VS 2017,当打开相同的解决方案时 - 测试不会显示在测试资源管理器中

在构建时,我们会看到以下消息:

[Informational] NUnit Adapter 3.10.0.21: Test discovery starting
[Informational] Assembly contains no NUnit 3.0 tests: C:\ihealautomatedTests\SeleniumTest\bin\x86\Debug\SeleniumTest.dll
[Informational] NUnit Adapter 3.10.0.21: Test discovery complete

解决方案(临时):

  • 卸载 NUnit 适配器 3.10...
  • 安装 NUnit VS 适配器 2.1..

现在显示测试。

还要检查测试项目中是否有一个完全空的 app.config 文件(完全空白,绝对没有标记)。 这是我的罪魁祸首。

就我而言,我创建了一个新的“解决方案配置”,如图所示。 因此,当我将自定义选项选为“Prod”时,由于某种原因,它无法识别 TestMehods。 改回“调试”可以解决问题

在此处输入图像描述

我不知道你们中的一些人是否也使用 JustMock,但我必须在 VS 2017 中禁用分析器才能进行测试检测。

我的解决方案中有许多不同类型的项目,我无法运行 Xunit 测试项目。 我卸载了除我的 Xunit 项目之外的所有这些,然后重建了测试出现在 Visual Studio 中的解决方案,我可以运行它们。

当您将 VS2015 移动到 VS2017 以在测试资源管理器中发现测试时,您需要更新所有包。

我清除了 Temp、%Temp% 和 Prefetch。 然后尝试重新打开VS并能够找到测试方法

我有测试项目 A 和 B。项目 A 中的测试发现但发现从未停止 B。我不得不手动终止 TestHost 才能停止。

我做了很多本页描述的事情,甚至到了我不确定这是否是解决方案的地步。

现在它起作用了,我所做的就是打开解决方案而不是启动测试资源管理器。 相反,我只是检查了测试的输出窗口,我可以看到发现过程结束并且测试数量等于 A+B。 在此之后,我打开了测试资源管理器,然后打开了 A 和 B。 所以:

正确卸载并安装最新的 xUnit。 如上所述删除 %temp%,添加 NuGet 包“Microsoft.TestPlatform.TestHost” 添加 NuGet 包“Microsoft.NET.Test.Sdk”,重新启动但只检查测试输出。 如果它有效,你会看到

将您的测试类设为公开并将注释添加为 [TestClass]

右键单击测试项目并选择属性。 将 Target 框架属性从 1.1 更改为其他内容(我使用的是 3.1),所有内容都将运行为 1.1 不再涵盖:P

打开输出 -> 测试并查看错误是什么。 就我而言,我收到了以下错误消息:

The framework 'Microsoft.AspNetCore.App', version '5.0.0' (x64) was not found.

安装 .Net SDK 5.0 后,测试立即生效: https ://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.402-windows-x64-installer

这对我来说很容易——包含测试方法的类必须是公共的。 :)

在属性窗口中检查 test.cs 文件的类型,它是 c# 编译器。 就我而言,我不小心将其更改为 embedresource 并遇到了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM