为什么Visual Studio 2015/2017/2019 Test Runner无法发现我的xUnit v2测试


173

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


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

我看过“输出”窗口,在“ 显示输出自”选项卡的“ 测试”下根本看不到任何东西。



1
这只是一个可能的问题,但是很显然,您必须先编译测试项目,然后才能将其显示在测试资源管理器中。
尼克拉斯·彼得



安装Xunit.Runner.VisualStudio已解决我的问题
Bendram

Answers:


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

  2. 测试|测试设置|如果您的测试是特定于x86 / x64的并且发现正在触发与Bittedness相关的异常(即不是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(扩展),则必须先将其卸载。现在仅通过NuGet分发Visual Studio运行程序。要删除它,请转到工具 > 扩展和更新。滚动到列表的底部,如果已安装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

  2. xunit.runner.visualstudio在所有测试项目中安装NuGet软件包

    • 包装:

      .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最终出现在输出目录中

  3. 关闭测试资源管理器<-这是我所缺少的

  4. 重新打开测试浏览器(Alt-S,W,T)

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


12
“关闭测试资源管理器<-这对我来说是缺少的一环”这也是我也错过的最重要的一步,花了5个小时来弄清楚。谢谢,我应该注意这些步骤:)
Esen

1
xunit VS赛跑者正在为我的sln工作。但是,它已经停止出现一天。发现我没有安装正在运行的VS,这可能是由于缓存所致,而缓存是由安装了运行程序的另一个sln留下的。安装流道后,一切恢复正常。因此,不要忘记为每个sln安装流道。
ZZZ

1
这是令人难以置信。删除其中有三个其他空文件夹的文件夹可以解决此问题。
t3chb0t

1
@martinJH我对此有一个自我回答(在OP中链接):- stackoverflow.com/questions/16214684/…;)没有透露我是如何发现的
Ruben Bartelink

1
确实很奇怪,但是删除%TEMP%\VisualStudioTestExplorerExtensions并重新启动VS终于可以了!
辛里奇

35

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

建筑


您是否在测试发现输出中看到之前的消息?
鲁宾·巴特林克

不,我没有看到任何错误,花了一段时间才弄清楚。
最多

嗯 奇怪(请参阅我的回答的顶部-它解释了要看的地方;通常会
标出

这为我解决了。我不知道为什么会有帮助,但确实有帮助。
VSO

2
我必须清理->更改后重建。
user2023861 '18

32

以上解决方案均不适用于我(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)

9
这对我有所帮助,我缺少了xunit.runner.visualstudio包。
Ognjen Babic

TestPlatform.TestHost仅从VS 2017迁移到VS 2019时才需要我的.NET 4.72 MS测试项目。
ΩmegaMan19年

这为我解决了。在“输出”窗口中,从下拉菜单中选择“测试” =>参见消息“缺少TestHost”消息。
六月


14

请按照以下步骤操作:

  1. 更新您MsTest.TestAdapterMsTest.TestFramework dll'snugget package manager
  2. 清洁您的溶液
  3. 建立您的解决方案。

1
您可以像我一样打开此问题的副本并自己回答吗?这是关于xUnit v2和更高版本的。即使xUnit v1答案在这里也没有位置。您可以将其链接到问题顶部,也可以将其链接到问题中
Ruben Bartelink '17

此解决方案有效。.否则,每次必须删除时%TEMP%\VisualStudioTestExplorerExtensions,有时仍然必须从控制台运行测试。
Venky

我正在使用NUnit,并通过NuGet将NUnit3TestAdapter更新为最新版本,从而解决了此问题。
dpberry178 '18

谢谢你-在我的例子中,只需要Update-Package -reinstall MSTest.TestAdapter即可完成测试。
罗布(Rob)

10

我整个下午都在为ASP Core项目和xUnit 2.2.0工作而苦苦挣扎。对我来说,解决方案是添加对Microsoft.DotNet.InternalAbstractions

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


“但报告了一个有用的错误”……是什么?还可以验证OP中所述的发现错误窗口中是否绝对没有列出它-例如,您可以自信地说“我已经在“输出”窗口中查看了,而在“显示”选项卡中的“测试”下根本看不到任何内容。 ”。?
Ruben Bartelink '16

1
请参阅更新后的答案,稍后将在相关情况下发布返回码信息。
Tom Makin

9

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


当您在下拉菜单中选择“测试”的情况下在输出窗口中查看时,有没有任何提示性消息?
Ruben Bartelink

2
完全没有,只是说未找到测试
Liam

就我而言,Test Explorer挂在了先前失败的测试上。如果我浏览到它并尝试右键单击-> Run或任何东西,则整个VS将挂起。只需执行“清理并重建”即可清除测试状态并为我解决了该问题。
Piedone

我可以补充一点,简单地构建(即F6)将无济于事,您需要在VS Solution Explorer中右键单击该解决方案,然后单击Rebuild Solution。
Piedone

8

确保您的测试课是公开的


在第一个条件中明确解决的问题(我链接了涉及该情况的另一个问题);此Q + A仅用于解决在给定环境中现在正常运行在其他地方的OK测试不适用于某人的问题。对我来说,这个答案只会使事情变得混乱,因为它稀释了那个独特性。
鲁宾·巴特林克

1
非常感谢。你救了我的日子。
hellouworld

7

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

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

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


6

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

以下是屏幕截图: 在此处输入图片说明

在此处输入图片说明在此处输入图片说明


听起来很痛苦。感谢您的分享,希望有一天能对您有所帮助。但是我不得不说:我想不出任何原因来影响调试信息级别影响发现过程,所以我只能说“我不认为这实际上是在打倒熊”-希望我错了虽然;)
鲁宾·巴特林克

@RubenBartelink完全同意您的意见,这就是为什么我在报价中提到“ solution” :)但很奇怪,一旦我这样做,它马上就起作用了。
curiousBoy

非常感谢你。这也是我的解决方法:)
Babulaas

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的版本对我来说很有效。您不必更改要测试的项目的版本,它只涉及测试项目本身。


5

我在Visual Studio 2019中遇到了相同的问题。只需安装以下NuGet程序包即可解决此问题。

1)。单位

2)。xunit.runner.visualstudio

3)。Microsoft.TestPlatform.TestHost

4)。Microsoft.NET.Test.Sdk


3

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

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


如果是在stackoverflow.com/questions/16214684/…上,我会对此表示赞成,因为这不是特定于xunit2的,也是一个很好的清单元素
Ruben Bartelink


3

VS没有发现测试方法时遇到了类似的问题。在我的情况下,该方法具有static关键字,该关键字已删除并且有效。

[TestMethod]

Before: public static void Test1()

After: public void Test1()

1
我真的更喜欢如果不在这里,因为这是关于在特定VS实例中找不到的正确测试。我有一个自问自答的内容,为什么找不到xunit测试:stackoverflow.com/questions/16214684/…。我可以建议您创建一个为什么无法通过MSTest测试(如果需要的话,由VS)进行测试的原因。(正如您可能知道的那样,这种特殊的关注甚至都不适用于xUnit,这是为什么(
尽管如此

MSTest找不到我的测试,因为类访问修饰符是内部的。
阿卜杜勒·萨博尔

3
  1. 关闭所有Visual Studio实例
  2. 转到%TEMP%\ VisualStudioTestExplorerExtensions \
  3. 删除与Specrun相关的文件夹
  4. 再试一次

让我知道,谢谢


2

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

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


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尝试使用与其所测试的库不同的体系结构来运行测试。不幸的是,在多个地方看来这可能会出错。

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

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

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

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

确保清洁并构建整个解决方案。您可能需要关闭并重新打开“测试资源管理器”窗口。在“输出->测试”窗口中查找任何其他错误,以获取有关不正确的体系结构类型的更多线索。

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


1

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

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

  • 打开输出窗口。
  • 显示输出的下拉选择更改为测试
  • 如果您看到类似以下的输出(可能对每个测试重复一次),则说明此答案中描述了问题:

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

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

  • 打开测试项目的属性(在解决方案资源管理器中选择测试项目,然后按Alt+ Enter)。
  • 切换到构建选项卡。
  • 点击高级...按钮(位于该选项卡页面的最后)。
  • 在下拉标记调试信息,选择nonepdb-onlyfull,但不是 portable。这是最后的设置,导致找不到测试。
  • 单击确定,然后清理并重建您的项目。如果要更加确定,请.pdb在重建之前转到测试项目的输出目录并清除所有文件。现在您的测试应该回来了。

1

当我第一次在VS 2017中使用IntelliTest进行第一次步行尝试时,发生了我的事。

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


1

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

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


我建议提出一个自我回答的问题,因为我这样做是隔离此类信息的最佳方法-如果您认为合理,可以随时复制粘贴我的整个问题和s / xUnit / MSTest /;)
Ruben Bartelink

1

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


1

就我而言,我在同一个解决方案中有多个测试项目,而只有一个项目没有显示“ Test Explorer”

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

我注意到在“合并”选项卡下,有一些“测试” nuget程序包在项目之间不同步。我单击“安装”,然后显示缺少的测试。


1

我尝试了上面的大多数建议,但没有任何效果。就我而言,我在一个团队中,并且针对相同解决方案的其他开发人员正在进行测试。因此,我尝试仅删除.vs文件夹,但也没有运气。

我最终完全删除了本地文件夹,然后重新克隆了存储库。那为我解决了。


1

这是为我们工作的解决方案。不是最好的,但也许可以受益。

背景:

  • 我们的脚本是使用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 Adapter 3.10 ...
  • 安装NUnit VS Adapter 2.1 ..

现在显示测试。


请在您自己的帖子中提取您的(至少是表面上的)新问题,以使之成为一个清晰的答案:)
geisterfurz007,2016年

...标题为“为什么NUnit TestAdapter v3看不到我的NUnit v2测试?并且a)在此处ping b)在顶部放一个“另请参见<link>”(即使它有点微弱),但是我想像这样的答案,因为它移除不与合身xUnit v2 tests的称号。
鲁文Bartelink

0

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


0

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

在此处输入图片说明


0

我不知道你们中的某些人是否也使用JustMock,但是我不得不在VS 2017中禁用探查器,才能进行测试检测。


嗯 如果您重新打开它,它会立即再次失败吗?
Ruben Bartelink '17

是的 如果关闭解决方案,请打开分析器并重新进入,测试检测将失败。
chrisdrobison
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.