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

更新:增加2019年;发现/运行器集成机制与2017年相同;2015年,所以可能出错的关键事情是一样的。


我读过为什么xUnit运行者没有找到我的测试,这包括原因xUnit将永远能够找到您的测试,但我的问题是不同的-我相信我的测试没有微妙的事情发生;(他们已经在其他环境中工作,这似乎只是我的机器)- Visual Studio 2015[社区版]中的Visual Studio测试运行器根本没有显示我的测试的任何。我没有做任何令人兴奋的事情;测试的目标是桌面上的xUnit.net v2。

我在输出窗口中看了看,在显示从选项卡中的测试下没有看到任何东西。

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

  2. 如果你的测试是x86/x64特定的,并且发现触发了位相关的异常,即不是AnyCpuTest|测试设置|默认处理器架构可以提供帮助

  3. 正如这个答案所建议的(如果这个技巧有帮助,请给它点赞) 运行桌面控制台运行器(指令)可以是一个很好的交叉检查,以消除其他可能性,例如,损坏的配置文件:-

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

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


去阅读文档 -它是全面的,最新的,包括故障排除信息,并采取PRs:-

重要提示:如果您之前已经安装了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)。

下面的步骤对我很有效:

  1. (只有当你怀疑你的机器上有严重的混乱时-通常更常见的情况是visual studio集成还没有安装)

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

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

    • < p >寄:

        .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. < p > 运行所有测试(Ctrl R, A)

我整个下午都在和一个ASP Core项目和xUnit 2.2.0做斗争。我的解决方案是添加对Microsoft.DotNet.InternalAbstractions的引用

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

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

对我来说,最常见的罪魁祸首是Visual Studio试图使用与它所测试的库不同的架构运行测试。不幸的是,这似乎在很多地方都可能出错。

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

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

然后从Test -> Test Settings ->选择Test Settings file。

然后,在Test -> Test Settings, Default Processor Architecture下,再次选择正确的架构。

确保清洁和构建整个解决方案。您可能需要关闭并重新打开Test Explorer窗口。在Output -> Test窗口中寻找任何其他错误,以获得有关不正确架构类型的更多线索。

供您参考,其他测试设置条目可以在在这里中找到。

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

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

因为新的可移植.pdb(调试符号)格式,您的测试没有找到吗?

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

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

If yes, do this to resolve the problem:

  • Open your test project's Properties (select the test project in Solution Explorer and press Alt+Enter).
  • Switch to the Build tab.
  • Click on the Advanced... button (located at the very end of that tab page).
  • In the drop-down labelled Debugging information, choose none, pdb-only, or full, but NOT portable. It is this last setting that causes the tests to not be found.
  • Click OK and clean & rebuild your project. If you want to be extra sure, go to your test project's output directory and clean all .pdb files before rebuilding. Now your tests should be back.
在将测试项目CPU更改为x64后,我不得不更改测试设置。

Architecture

在花了2天后…以上这些方法对我都没用。唯一的“解决方案”是: 进入项目属性->构建选项卡。然后单击窗格右下角的“高级”按钮。将“Debug Info:”修改为“full”,单击“OK”。< / p > 以下是屏幕截图: enter image description here < / p >

enter image description hereenter image description here

当我在VS 2017中用IntelliTest第一次尝试走路时,我就遇到了这种情况。

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

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

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

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

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

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

在我的例子中,我创建了一个新的“解决方案配置”,如图所示。所以当我选择我的自定义为“Prod”时,由于某些原因它不识别testmethods。更改回“Debug”可以解决问题

enter image description here

我不知道你们中的一些人是否也使用JustMock,但我不得不在VS 2017中禁用分析器,以便测试检测工作。

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

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

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

测试运行器兼容性矩阵的检查在这里:

https://xunit.net

我使用的是xUnit 2.2.0。

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

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

如何在CLI中运行xunit测试

遇到类似的问题,VS没有发现测试方法。在我的情况下,我有静态关键字的方法,我删除了它,它工作。

[TestMethod]


Before: public static void Test1()


After: public void Test1()

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

遵循以下步骤:

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

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

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

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

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

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

我注意到在“巩固”标签下有一些“测试”的nuget包在项目之间不同步。我点击“安装”,丢失的测试就出现了。

I Cleared Temp, %Temp% and Prefetch。然后尝试重新打开VS,并能够找到测试方法

我有测试项目A和B.在项目A中发现的测试,但发现从未停止B.我不得不手动杀死TestHost使停止。

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

现在它工作了,我所做的事情是打开解决方案,没有测试资源管理器。相反,我只是检查输出窗口的测试,我可以看到发现过程结束,测试的数量等于A+B。在这之后,我打开测试资源管理器,然后A和B都出现了。 所以:< / p > 正确地卸载和安装最新的xUnit东西。删除上面提到的%temp%,添加NuGet包" microsoft . testplatform . testthost " 添加NuGet包“Microsoft.NET.Test”。Sdk”,重新启动,但只检查测试输出。如果它工作,你会看到

我尝试了上面的大部分建议,但都没用。以我为例,我在一个团队中,为其他开发人员提供相同解决方案的测试。所以,我试图删除我的。vs文件夹,但运气也不好。

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

很长一段时间以来,我一直被这个问题困扰着。

  • 我有大约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. Test>测试设置>默认处理器架构。然后选择X64或X86。
  2. 项目>(您的项目)属性>构建(选项卡)>平台目标。

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

我可以为几天前遇到的一个边缘情况提供一个解决方案。这个解不可能满足上面描述的所有情况,但是,对于边缘情况,我把它修正了。

我在最新的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对我来说很有效。您不必更改正在测试的项目版本,只需更改测试项目本身即可。

这是对我们有效的解决方案。不是最好的,但也许能从中受益。

背景:

  • 我们的脚本是用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适配器

现在显示测试。

我在Visual Studio 2019上也遇到了同样的问题。只要安装以下NuGet包,问题就解决了。

1)。xUnit

2)。xunit.runner.visualstudio

3)。Microsoft.TestPlatform.TestHost

4)。Microsoft.NET.Test.Sdk

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

让我知道,谢谢

确保你的测试类是公共

使您的测试类为公共的,并添加注释为[TestClass]

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

在属性窗口检查test.cs文件的类型,它是c#编译器。在我的情况下,我不小心将其更改为嵌入式资源,并面临这个问题。

右键单击测试项目并选择属性。 将目标框架属性从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

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