测试未在测试资源管理器中运行


145

我目前正在研究目前有32个单元测试的解决方案。我一直在与reshaper测试运行程序合作-效果很好。所有测试都在运行,所有测试都显示正确的测试结果。现在,一位同事告诉我,使用Visual Studio测试资源管理器无法在其计算机上运行测试。他们在我的机器上都不工作,因此我可以排除一些本地丢失的文件或其他东西。

测试资源管理器将显示所有单元测试,但是一旦单击“全部运行”,所有测试将显示为灰色,并且不显示测试运行的结果:

在此处输入图片说明

  • 所有测试课程都是公开的
  • 所有测试类都具有[TestClass]声明的属性
  • 所有测试方法都使用该[TestMethod]属性
  • 生产力代码和测试项目都针对.NET 3.5。
  • 我已经尝试干净的构建我的解决方案,和/或删除所有objbinDebugRelease文件夹

如果有任何提示可能引起这种行为,我将不胜感激。


3
更新您的ReSharper。请参阅本stackoverflow.com/questions/16011775/...
kmhigashioka

17
如果VS说为什么不运行测试,那不是很好吗?目标平台不匹配,缺少测试适配器,... :(
Bernhard Hofmann,

1
在哪里提到他们使用ReSharper?
亚历克斯75

4
@BernhardHofmann我现在遇到了这样的问题,事实证明VS在“输出”>“测试”中吐出了一些错误消息。重要。令人沮丧的是,VS并没有使它们更明显,但这是在这种情况下进行查看的地方。
JLRishe

2
:你们都可能有兴趣在upvoting此功能要求developercommunity.visualstudio.com/idea/947742/...
凯尔德莱尼

Answers:


157

如果您的项目不是全部AnyCpu,那么您可能还需要检查以下两个设置是否匹配:

  1. [右键单击测试项目]->属性->构建->平台目标-例如x64

  2. [主菜单]->测试->测试设置->默认处理器体系结构-> X64

我发现当这些与我的测试项目不匹配时,我的测试项目将无声地无法运行。


5
这个答案与“打开和关闭它并驾齐驱”并驾齐驱,因此,如果这对您有用,请进行投票。
lukkea

这个问题解决了我的问题(从混合平台切换到Anycpu)
Marcel Studer

1
确保您的测试项目不是netstandard2.0而是netcoreapp2.2
user2033412 '19

4
工作了 我真的对VS会给我们明确的警告或错误消息或其他内容。
匿名

9
VS2019版本:主菜单->测试-> AnyCPU项目的处理器体系结构-> X64。
StackOverthrow

64

我在VS 2017中遇到了同样的问题。就我而言,它是通过重新启动VS来解决的。


7
我之前对我为什么要下注的评论已删除,因此我会更加清楚。这不是解决问题的方法。这是一个临时解决方案,无法解决根本问题。我不认为SO应该成为一个应该告诉人们“关闭并重新打开”的地方,这是在您到达这里之前应该学习的知识。请参阅Joseph Simpson的答案以获取解决方案。
lukkea

5
@lukkea我遵循Joseph Simpson的回答并确认,我的所有项目都在AnyCpu上。我仍然遇到这里描述的问题。对我来说,重新启动VS很有帮助。这不是VS2012第一次具有此类组织(不仅在我的计算机上)。我同意您的观点,这不是一个好的解决方案,但是如果项目没有问题,那可能是唯一的帮助。但是,应该检查清理重建是否也没有帮助。
Sascha

2
如果仅“打开和关闭它”会解决我所有的问题。仍然令人惊讶的是它确实修复了多少。不得不提醒我去stackoverflow有点令人尴尬,但是我发现这个答案很有用。
理查德·加赛德

2
@lukka有时Visual Studio是潜在的问题,而重启是解决方案
JSON

1
仍适用于VS2019 ....
Tronald

44

如果您使用的是NUnit而不是MSTest,则需要Visual Studio 2012/2013 的NUnit测试适配器扩展


9
这帮助我弄清楚了我需要安装“ NUnit 3测试适配器”:marketplace.visualstudio.com/…–
Westerlund.io,

10
在VS 2019中,我从软件包管理器nuget.org/packages/NUnit3TestAdapter
Maylon 19'Aug

根据此页面,您还需要Microsoft.NET.Test.Sdk从Nuget
BlueRaja-Danny Pflughoeft

在VS 2017中,我安装了Extension Nunit 3 Test Adapter,并且工作正常。
Bob Lokerse

在VS 2019中,我还安装了Extension Nunit 3 Test Adapter,并且工作正常。注意事项:我还需要更新Visual Studio。
Bob Lokerse

42

我必须更改异步测试方法以返回Task而不是void。

然后,这些测试处于活动状态,并且可以在“测试资源管理器”中运行。


1
无法等待异步void方法完成。异步虚空就是“生死攸关”。这就是为什么无法对其进行测试的原因。
Ketobomb

当我读到这篇文章时,我的脸部表情在大地上回荡……感谢您指出我的愚蠢。那对我有用。推荐
JP

虽然属于“禁止”类别。我希望这能引起更多的投票,因为它非常明显,您的返回类型必须是Task,但很容易忘记(因为似乎世界上没有其他单元测试会返回任何东西,但void除外)并将您送往修复您的单元的兔子洞没有实际配置问题时,请测试配置。真希望这只是导致编译器或至少引发运行时错误。
pat8719

2
@ pat8719,听起来对代码分析器来说是个好主意。他们写起来并不难。我只是写了一个xunit事实async void Foo(),他们的分析仪没有抱怨,但是他们当然可以添加一个。抄送:@bradwilson
benmccallum

22

检查针对哪些框架编写测试(例如,nunit,xunit,VS测试等),并确保已安装正确的测试适配器/运行程序扩展。

对我来说,是缺少NUnit 3测试适配器,我通过查看nunit.framework依赖版本来确认所需的版本号(在解决方案资源管理器的“依赖关系”树中选择.dll,然后按F4键打开“属性”窗口)。


2
自我注意:我的原始MSTest项目已引用Microsoft.VisualStudio.QualityTools.UnitTestFramework(不确定哪个版本)。通过删除该引用并安装最新的(v2.1.0)MSTest.TestAdapter(和框架),解决了方法无法运行(或未找到)的问题
Adam Cox,

@AdamCox Microsoft.VisualStudio.TestTools.UnitTesting已弃用?我对此进行了一些测试,在重新为其依赖的项目添加了一些引用之后,突然退出了上述运行。
ebyrob

@ ebyrob,Athanasios在下面的回答可能与此有关。似乎他不仅必须升级/升级到MSTest。*软件包,而且还添加了一些依赖项并修复了一些绑定重定向。检查您的警告输出。
benmccallum

16

TLDR:更新测试包,查看输出->测试控制台

我为此奋斗了一天半。所以这是我要做的解决方案:

病征

  1. 5个单元测试项目,都可以在TestExplorer中找到
  2. 五分之二正确执行
  3. 3声明完全不运行
  4. .net框架更新后问题开始

调查中

由于所有软件包都在.net框架更新期间进行了更新,因此我从工作项目与不工作项目之间的区别开始。第一个线索是所有3个项目都在使用:MSTest.TestAdapterMSTest.TestFramework

自然,我去了VS 2019中的-> 输出控制台 -> 测试下拉菜单,然后查看了输出。那里没什么用。

解决方案的第一步:将MSTest.TestAdapterMSTest.TestFramework更新到2.0.0

解决方案的第二步:现在,输出控制台 -> 测试下拉列表输出开始一个接一个显示,缺少软件包和错误的绑定重定向

解决方案的第三步:手动添加缺少的软件包。对我来说

  1. System.Runtime.Extensions
  2. 系统反射
  3. 也许我想念的更多

解决方案的第4步:删除/修复了不必要的绑定重定向。

我希望这会帮助其他人。


那一天半你救了我!我升级了一个4.5 FW版本的项目,并尝试从软件包中删除所有不必要的内容,最终导致这种情况。谢谢!
努曼

我想我正在经历类似的事情。最终,我只是从头开始重新创建了该项目。显然,*。csproj文件中有一行设置ToolsVersion并碰撞了我的所有内容。我只能说是对MS单元测试的“购买者当心”,并且随时可以替换* .csproj文件,这是因为它们紧密集成并且非常依赖于版本。
ebyrob

谢谢,虽然不是我直接遇到的问题,但检查控制台输出的提示向我显示了导致我的测试无法运行的错误(DBContext Dispose方法存在错误)。
伊恩·卡林


10

我发现在项目中它没有引用Microsoft.VisualStudio.QualityTools.UnitTestFramework程序集。相反,它引用的是Microsoft.VisualStudio.TestPlatform.TestFrameworkMicrosoft.VisualStudio.TestPlatform.TestFramework.Extensions。当我删除这两个引用并将引用添加到Microsoft.VisualStudio.QualityTools.UnitTestFramework程序集时,以前标记为蓝色感叹号的测试突然变为活动状态并开始工作。

单元测试未以错误的组装运行

使用正确的组件,测试可以运行


2
从.NET Framework 4.6.2切换到.NET Framework 4.7.2之后,我的测试不再运行。经过数小时的尝试,只有此解决方案对我有用。
埃里克伯杰龙

10

我遇到了这个问题,对我来说,这是由多个具有不同版本的测试项目引起的:

  • MSTest.TestAdapter
  • MSTest.TestFramework

合并项目的nuget包使它们相同,这对我来说解决了这个问题。


1
这个答案帮助我找到了类似的原因。在我的情况下,一些测试项目引用了Microsoft.VisualStudio.TestPlatform.TestFramework(并且未运行),而其他测试项目引用了Microsoft.VisualStudio.QualaityTools.UnitTestFramework(将要运行的项目)。
jr

10

全新安装VS 2019后,出现了相同的问题。找到了测试,但未运行“发生意外错误”。通过设置x64而不是默认情况下选择的x86进行了修复。

在此处输入图片说明


4
这是我的解决方法,同时重新启动VS并删除.vs文件夹。谢谢。
唐纳德。

8

就我而言,这是因为解决方案中的一个测试项目安装了MSTest.TestFramework和MSTest.TestAdapter nuget软件包,而其他项目则没有。显然,在解决方案中的一个项目已安装它们之前,不需要运行这些软件包。

通过将这些软件包安装在缺少它们的测试项目上,可以解决此问题。


在我的情况下,情况正好相反:任何具有MSTest nuget程序包的单元测试项目都不会像其他程序那样运行。奇怪。
Palle Due

解决:我有一个.testsettings文件。MSTest软件包需要一个.runsettings文件。这就是为什么测试没有运行的原因。
Palle Due




4

在我的情况下,我有一个async void方法,并替换为async Task,因此测试按预期运行:

    [TestMethod]
    public async  void SendTest(){}

用。。。来代替 :

    [TestMethod]
    public async  Task SendTest(){}

1
这是我的问题
Kyle Delaney

3

我有相同的症状。

请确保通过工具-扩展和更新安装了正确的Visual Studio扩展。就我而言,我必须从Online选项安装XUnit和Specflow。

然后清洗溶液并重新构建。

如果仍然不能解决问题,请清除您的临时目录(在“开始”菜单中搜索“%temp%”,然后删除“临时”中的所有内容)

然后最后尝试卸载Resharper,这最终解决了我的问题。


4
卸载Resharper ?!我认为这不是解决方案^^
Steve Rakebrandt

2

这里是未标记为要构建的测试项目:

生成->配置管理器...->检查测试项目的生成


2

由于我遇到这种错误,因此我发布了我的问题/解决方案:

症状:

  • 并非所有测试都在运行,但是它们并不依赖于每个项目,只有其中一些已执行。
  • 所有被处决的人都是绿色的。
  • 技术堆栈:dotnet核心/ XUnit / FluentAssertions
  • 检测到的所有测试均已更改,并进行了更新。
  • 通过多次选择或运行“未运行的测试”,可以执行它们。

问题:

代码中存在错误,该错误在另一个线程内引发了异常。所有测试断言都通过了,但是它取消了测试执行。我可以在“测试输出”(NullException)中看到错误。


+1我尝试调试特定的测试。当我最终运行另一个更简单的测试时,可以调试特定的测试。这个答案让我尝试了。
哈佛大学

2

具有相同的症状,在我的情况下,问题是dotnet核心SDK版本

这些项目的目标是2.2,并且能够使用3.0进行构建。安装最新的2.2 SDK版本后,它们便可以运行。


2

在Visual Studio 2019 16.4.6和更高版本中尝试了许多选项 Microsoft.VisualStudio.TestTools.UnitTesting,但目前唯一成功运行测试的方法是在控制台中调用next命令

dotnet test

在“测试资源管理器”中发现了测试,但结果为“未运行”。

更新Visual Studio没有帮助。

通过运行下一个软件包的最新版本,解决了“没有测试与给定的测试用例过滤器FullyQualifiedName相匹配的问题”:

Microsoft.NET.Test.Sdk
MSTest.TestAdapter
MSTest.TestFramework

1

对我来说,解决方案是将Resharper单元测试设置“默认平台体系结构”更改为“ x64”

在此处输入图片说明


这解决了我的一个.NET Core 3.1项目问题,该项目拒绝在Test Explorer中执行测试。除此之外,没有别的方法可以修复它。
J_L

1

对我来说,重新启动VS2017没有用。我必须清理sln,然后找到一个文件,其中包含未运行的测试,并且仅运行该文件。之后,我确实运行了所有程序,并且再次正常运行。



1

就我而言,它可以更新MSTest nuget软件包。即使在空白的MSTest项目上,也可以重现此问题并更新工作包。


1

对我来说,在基类中拥有一个名为TestContext的属性会导致这种现象。例如:

[TestClass]
public abstract class TestClassBase
{
    protected object TestContext { get; private set; }
}

[TestClass]
public class TestClass : TestClassBase
{
    // This method not found
    [TestMethod]
    public void TestCase() {}
}

1

我可以从您的属性中得知您正在使用MSTest。我有一个类似的问题:我的测试显示在“测试资源管理器”中,但是当我尝试运行它们(通过选择“全部运行”或单独选择它们)时,它们不会。

我的问题是我从一个空的.NET标准类库项目中手动创建了单元测试项目。我已经安装了MSTest.TestFrameworkNuGet软件包,但没有安装该MSTest.TestAdapter软件包。一旦我安装了适配器包,它们就会按预期运行。

回顾起来似乎很明显,但是当您从模板创建单元测试项目时,您将这些事情视为理所当然。


1

值得一提的是,有时Windows 10和更高版本上的用户文件夹C:\ Users [User] \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \ NUnit3TestAdapter.3.8.0 / build / net35 / NUnit3.TestAdapter.dll中的NUnit测试适配器文件会损坏。导致测试资源管理器停止应有的工作。


1

我将VS2019与.Net 4.7一起使用。我安装了NUnit扩展v3,并将“测试”设置更改为使用X64。我的单元测试项目是Any CPU(如果将其更改为x64,则可以工作)。现在,我可以调试代码了。



1

您可以通过打开“输出”面板(视图->输出)并从“显示输出自”下拉列表中选择“测试”来查看测试运行程序的错误输出。

显示来自的输出


此外,如果您已安装Resharper可以打开测试文件并将鼠标悬停在测试旁边的测试圈上,以获取其他错误信息

转载输出

单击该按钮将带您进入具有更多详细信息的窗口。或者,您可以通过转到扩展->整形器-> Windows->单元测试探索结果来打开该窗口。

Resharper单元测试探索

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.