ChatGPT解决这个技术问题 Extra ChatGPT

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

想要改进这篇文章?提供这个问题的详细答案,包括引文和解释为什么你的答案是正确的。没有足够细节的答案可能会被编辑或删除。

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

我已经阅读了 Why is the xUnit runner not finding my tests, which covers reasons xUnit would never be able to find your tests,但我的问题有所不同——我相信我的测试没有任何微妙之处; (他们曾在其他环境中工作过,这似乎只是我的机器) - Visual Studio 2015 [社区版] 中的 Visual Studio 测试运行程序根本没有显示我的任何测试。我没有做任何令人兴奋的事情;测试针对桌面上的 xUnit.net v2。

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

这只是一个可能的问题,但显然您必须先编译测试项目,然后它才会显示在测试资源管理器中。
我遇到了这个问题,因为忘记公开我的新测试课程。

I
Ian Kemp

从您的查询中消除发现异常;转到输出窗口 (Ctrl-Alt-O),然后将显示输出从下拉列表 (Shift-Alt-S) 切换到测试并确保没有发现异常测试|测试设置|默认处理器架构可以帮助您的测试是 x86/x64 特定的并且发现正在触发与 bittedness 相关的异常,即不是 AnyCpu 正如此答案中所建议的(如果技术有帮助,请投票)运行桌面控制台运行程序(说明)可以是一个很好的交叉检查以消除其他可能性,例如损坏的配置文件:-

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

注意 xunit.runner.console 包已弃用 - 当您在 VS 中工作时,您也可以让 dotnet test 在 CI 上下文中运行它们

Go read the documentation - 它是全面的、最新的,包括故障排除信息并需要 PR:-

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

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

以下步骤对我有用:

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

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

PS> del $env:TEMP\VisualStudioTestExplorerExtensions

在所有测试项目中安装 NuGet 包 xunit.runner.visualstudio Paket:.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 Rebuild 以确保 xunit.runner 在输出目录中结束 关闭测试资源管理器<- 这对我来说是缺少的一点重新打开测试资源管理器(Alt-S,W,T)运行所有测试(Ctrl R,A)


“关闭测试资源管理器 <- 这对我来说是缺失的部分” 这也是我错过的最重要的一步,花了 5 个小时才弄清楚。谢谢,我应该注意步骤:)
xunit VS runner 正在为我的 sln 工作。然而,有一天它不再出现了。发现我没有安装运行的 VS,它可能是因为缓存,它是由另一个安装了 runner 的 sln 留下的。安装跑步者后,一切又正常了。所以不要忘记为每个 sln 安装 runner。
这是令人难以置信。删除其中包含其他三个空文件夹的文件夹解决了该问题。
@martinJH 我对此有一个自我回答(在 OP 中链接):- stackoverflow.com/questions/16214684/… ;) 虽然没有透露我是如何发现的
真的很奇怪,但删除 %TEMP%\VisualStudioTestExplorerExtensions 并重新启动 VS 终于奏效了!
Ω
ΩmegaMan

上述解决方案都不适合我(dotnetcore 1.1,VS2017)。这是修复它的方法:

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

这些是我之前安装的这些软件包的补充:

xunit (2.3.0-beta1-build3642)

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


这对我有帮助,我缺少 xunit.runner.visualstudio 包。
我的 .NET 4.72 MS 测试项目仅在从 VS 2017 迁移到 VS 2019 时才需要 TestPlatform.TestHost
这为我解决了。在输出窗口中,从下拉列表中选择测试 => 查看消息“缺少 TestHost”消息。
M
Max

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

https://i.stack.imgur.com/sIfw0.png


您是否在测试发现输出中看到了之前的消息?
不,我没有看到任何错误,花了一段时间才弄清楚。
唔;奇怪(见我回答的顶部 - 它解释了在哪里看;通常这是被标记的(尽管在某些情况下根本没有任何消息))
这为我修好了。我不知道为什么这会有所帮助,但确实如此。
我不得不清理——>改变后重建。
C
Chris Aelbrecht

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


页面上的最佳答案。解决了我的问题。
已经安装,但是通过 nuget 升级版本让它再次工作。
精确的解决方案,适用于 VS 2019
s
shaeed

确保您的测试课程是公开的。


这在第一个附带条件中明确解决(我链接了另一个涵盖该案例的问题);此 Q+A 仅是关于故障排除在其他地方正常工作的 OK 测试在给定环境中现在如何不适用于现在的某人。对我来说,这个答案只会使事情变得混乱,因为它会稀释这种独特性。
这就是我的问题。谢谢!
M
Marian Nasry

请按照以下步骤操作:

从 nugget 包管理器更新您的 MsTest.TestAdapter 和 MsTest.TestFramework dll。清理您的解决方案 构建您的解决方案。


你能像我一样打开这个问题的克隆并自我回答吗?这个是关于 xUnit v2 及更高版本的。甚至 xUnit v1 的答案在这里也没有位置。您可以在问题顶部也通过查看链接到它,或者我可以在问题中链接到它
此解决方案有效。否则每次我必须删除 %TEMP%\VisualStudioTestExplorerExtensions 时,有时我仍必须从控制台运行测试。
我正在使用 NUnit,我通过 NuGet 将 NUnit3TestAdapter 更新到最新版本解决了这个问题。
谢谢你 - 在我的例子中,只需要 Update-Package -reinstall MSTest.TestAdapter 并且测试得到了拾取。
T
Tom Makin

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

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


“但报告了一个有用的错误”......这是什么?您还可以验证它肯定没有在 OP 中所述的发现错误窗口中列出 - 即您能否自信地声明“我已经查看了输出窗口,并且在显示选项卡的输出中的测试下根本看不到任何内容。” ?
请参阅更新的答案,如果相关,我将在稍后发布返回代码信息。
L
Liam

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


当您在下拉菜单中选择测试时查看输出窗口时是否有任何明显的消息?
根本没有,它只是说没有找到测试
就我而言,测试资源管理器挂在之前失败的测试中。如果我浏览它并尝试右键单击-> 运行或其他任何东西,那么整个 VS 就会挂起。只需执行清理和重建即可清除测试状态并为我解决问题。
我可以补充一下,简单的构建(即 F6)不会有帮助,您需要在 VS 解决方案资源管理器中右键单击解决方案,然后单击重建解决方案。
C
Chamila Maddumage

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

1)。 xUnit

2)。 xunit.runner.visualstudio

3)。 Microsoft.TestPlatform.TestHost

4)。 Microsoft.NET.Test.Sdk


c
curiousBoy

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

https://i.stack.imgur.com/tOT3L.jpg

https://i.stack.imgur.com/AtUag.jpg


听起来很痛苦。感谢分享,希望有一天它对某人有所帮助。但是我不得不说:我想不出调试信息级别影响发现过程的任何原因,所以我只能说“我不认为那是实际射杀熊的原因”——希望我错了尽管 ;)
@RubenBartelink 完全同意你的观点,这就是为什么我在引用中提到“解决方案”:) 但很奇怪,一旦我这样做了,它就立即起作用了。
非常感谢。这也是我的解决方法:)
R
Ruben Bartelink

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

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

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


S
SohamC

我正在使用 xUnit 2.2.0。

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

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

How to run xunit tests in CLI


b
baumgarb

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

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

我正在处理一个针对 .NET 框架 4.5 的遗留项目。但是,从 2.2 版开始。 XUnit 不支持低于 4.5.2 的 .NET 框架(请参阅 Release Notes - XUnit 2.2: February 19, 2017

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


l
live-love

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

[TestMethod]

Before: public static void Test1()

After: public void Test1()

如果这不在这里,我真的更喜欢,因为这是关于在 VS 的特定实例中找不到的其他正确测试。我有一个关于为什么无法发现 xunit 测试的自我回答:stackoverflow.com/questions/16214684/…。我可以建议你创建一个为什么我的 MSTest 测试不能被拾取(如果你愿意,可以通过 VS)。 (如您所知,这个特别的问题甚至不适用于 xUnit,这是另一个原因,尽管它很有帮助,但您的答案不属于这里)
MSTest 没有找到我的测试,因为类访问修饰符是内部的。
c
cd747

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

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


如果它在 stackoverflow.com/questions/16214684/… 上,我会赞成,因为这不是 xunit2 特定的,也是一个很好的清单元素
v
vullnetyy

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

Check here 用于测试运行器兼容性矩阵:

https://xunit.net


两个链接都死了。
s
stakx - no longer contributing

还有一个原因可能导致 Test Explorer 不显示任何测试,这与 Visual Studio 2017 / for .NET Core 引入的新的可移植 .pdb 文件格式有关,这可能会破坏一些VS 工具。 (背景:见the bug report "Mono.Cecil causes OutOfMemoryException with new .csproj PDBs"。)

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

打开输出窗口。

将显示输出的下拉选择从更改为测试。

如果您看到类似于以下的输出(可能对每个测试重复一次),那么您已经遇到了此答案中描述的问题:Exception System.OutOfMemoryException, Exception conversion Array dimensions exceeded supported range。

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

打开测试项目的属性(在解决方案资源管理器中选择测试项目并按 Alt+Enter)。

切换到构建选项卡。

单击“高级...”按钮(位于该标签页的最末端)。

在标有调试信息的下拉菜单中,选择无、仅 pdb 或完整,但不可移植。正是这最后一个设置导致无法找到测试。

单击确定并清理并重建您的项目。如果您想更加确定,请转到您的测试项目的输出目录并在重建之前清理所有 .pdb 文件。现在你的测试应该回来了。


Z
Zach J.

就我而言,我在解决方案中有 2 个不同的测试项目。可以找到项目 1 的测试,但找不到项目 2 的测试。我发现首先卸载测试项目 1,然后关闭 VS > 清除我的临时文件 > 重新打开解决方案 > 重建,允许 VS 发现我的项目 2 测试。

我假设两个测试项目之间一定存在冲突,这是让我在几分钟内启动并运行的最快方法。扭结可以稍后解决:)。


N
Nafeez Abrar

我被这个问题困扰了很长时间。

我在不同的服务器上部署了大约 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

a
alvarodoune

关闭所有 Visual Studio 实例 转到 %TEMP%\VisualStudioTestExplorerExtensions\ 删除 specrun 相关文件夹 再试一次

让我知道,谢谢


C
Catalin Enache-Stoian

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


这组原因将使它们无法在任何地方的任何人的机器上运行(除了 TestDriven.net 将半运行它们)包含在 OP 中链接的问题中:stackoverflow.com/questions/16214684/…
请不要添加“谢谢”作为答案。一旦您有足够的 reputation,您将能够vote up questions and answers您认为有帮助。 - From Review
T
Tobias J

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

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

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

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

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

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

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


C
Christian

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

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


A
Alex Albu

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

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


我建议像我一样问一个自我回答的问题是隔离此类信息的最佳方式 - 如果您认为有意义,请随意复制粘贴我的整个问题和 s/xUnit/MSTest/ ;)
k
kDar

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


C
CBBSpike

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

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

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


P
Paul G

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

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


Z
Zoe stands with Ukraine

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

背景:

我们的脚本是使用 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..

现在显示测试。


请将您的(至少看似)新问题提取到其自己的帖子中,以使其成为明确的答案:)
...标题为“为什么 NUnit TestAdapter v3 没有看到我的 NUnit v2 测试?a)在这里 ping b)在顶部放置一个“另见 <link>”(即使它有点脆弱),但我我希望删除此答案,因为它与标题中的 xUnit v2 tests 不符。
G
Gopal Krishnan

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


E
Emil

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

https://i.stack.imgur.com/k8Rpq.png