Tests not running in Test Explorer

ElG*_*ooo 61 resharper unit-testing visual-studio visual-studio-2012

I am currently working on a solution that has currently 32 Unittests. I have been working with the resharper test runner - which works fine. All tests are running, all tests are showing the right test outcome. Now a coworker told me, that the tests are not running on his machine using the Visual Studio test explorer. They are not working either on my machine, so i can exclude some local missing files or something.

The Test Explorer is showing all unit tests, but once clicking on "Run All", all tests are getting greyed out and show no result of the test run:

enter image description here

  • All test classes are public
  • All test classes are having the [TestClass] attribute declared
  • All test methods are using the [TestMethod] attribute
  • Both the productivity code and the test projects are targeting .NET 3.5.
  • I have already tried to clean build my solution, and / or delete all obj, bin, Debug and Release folders

I'd apprechiate any hints which could cause such a behaviour.

Jos*_*son 91

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

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

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

我发现当这些不匹配时,我的测试项目会默默无法运行.

  • VS2019 版本:主菜单 -> 测试 -> AnyCPU 项目的处理器架构 -> X64。 (28认同)
  • 工作了。我真的使用 VS,你知道,给我们一个明确的警告或错误消息或其他东西。 (6认同)
  • 这个答案与“打开和关闭它并驾齐驱”并驾齐驱,因此,如果这对您有用,请进行投票。 (3认同)
  • 确保您的测试项目不是 netstandard2.0 而是 netcoreapp2.2 (2认同)

小智 41

我在VS 2017中遇到了同样的问题.在我的情况下,它通过重新启动VS解决了.

  • @lukka 有时 Visual Studio 是根本问题,重新启动就是解决方案 (11认同)
  • 要是“再次打开和关闭它”就能解决我所有的问题就好了。仍然令人惊讶的是它确实修复了多少。有点尴尬的是,我必须去 stackoverflow 才能被提醒这样做,但我发现这个答案很有用。 (6认同)
  • @lukkea我遵循Joseph Simpson的回答并确认,我的所有项目都在AnyCpu上。我仍然遇到这里描述的问题。对我来说,重新启动VS很有帮助。这不是VS2012第一次具有此类组织(不仅在我的计算机上)。我同意您的观点,这不是一个好的解决方案,但是,如果项目没有错,那可能是唯一的帮助。但是,应该检查清理重建是否也没有帮助。 (3认同)
  • 我之前对我为什么要下注的评论已被删除,因此我会更加清楚。这不是解决问题的方法。这是一个临时解决方案,无法解决根本问题。我不认为SO应该成为一个告诉人们“关闭并重新打开”的地方,这是在您到达这里之前应该学习的知识。请参阅Joseph Simpson的答案以获取解决方案。 (2认同)
  • 每隔几年就会重新审视这个主题。这次我有 VS 2022 17.4.0,所有项目都使用 x64,我在这里尝试了所有其他技巧。测试无法运行。重新启动 VS2022 立即解决。没有文件被删除。 (2认同)

mar*_*net 30

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

单元测试不以错误的程序集运行

使用正确的组装,测试运行

  • 从 .NET Framework 4.6.2 切换到 .NET Framework 4.7.2 后,我的测试不再运行。经过几个小时的尝试,只有这个解决方案对我有用。 (4认同)

Ath*_*ras 28

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

我为此挣扎了一天半。所以这就是我为解决它所做的:

症状

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

调查

由于在 .net 框架更新期间更新了所有包,我从工作项目和不工作项目之间的差异开始。第一个线索是所有 3 个项目都在使用:MSTest.TestAdapterMSTest.TestFramework

当然,我去了- > 输出控制台- >测试下拉VS 2019,看着输出。那里没什么用。

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

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

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

  1. 系统.运行时.扩展
  2. 系统反射
  3. 也许还有一些我想念的

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

我希望这会帮助别人。

  • 谢谢,虽然不是直接我的问题,但检查控制台输出的提示向我显示了错误(DBContext Dispose 方法中有一个错误),该错误阻止了我的测试运行。 (3认同)

Pie*_*ers 18

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

  • 这帮助我确定需要安装“ NUnit 3测试适配器”:https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.NUnit3TestAdapter (3认同)
  • 在VS 2019中,我从包管理器https://www.nuget.org/packages/NUnit3TestAdapter/安装适配器 (2认同)
  • 根据[此页](https://github.com/microsoft/vstest/issues/1870),您还需要从 Nuget 安装“Microsoft.NET.Test.Sdk” (2认同)
  • 在 VS 2019 中,我还安装了 Extension Nunit 3 Test Adapter 并且它有效。需要注意的是:我还需要更新 Visual Studio。 (2认同)
  • +1 谢谢!即使使用最新版本的 VS 2019 16.5.5,我也没有收到任何消息表明出了什么问题。它默默地失败了。 (2认同)

小智 16

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

然后,这些测试处于活动状态,并且可以在Test Explorer中运行。

  • 无法等待 async void 方法完成。Async void 是“即发即忘”。这就是为什么它们无法被测试。 (4认同)
  • 当我读到这篇文章时,我的捂脸动作在大地上回响……谢谢你指出我的愚蠢。这对我有用。已投赞成票 (2认同)
  • @pat8719,听起来对于代码分析器来说是个好主意。它们并不难写。我刚刚写出了一个执行 `async void Foo()` 的 xunit 事实,他们的分析器没有抱怨,但他们当然可以添加一个这样的事实。抄送:@bradwilson (2认同)

Jon*_*yan 15

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

  • MSTest.TestAdapter
  • MSTest.TestFramework

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


Blu*_*eft 15

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

显示输出


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

Resharper 输出

单击它会将您带到一个包含更多详细信息的窗口。或者,您可以通过转至 Extensions --> Reshaper --> Windows --> Unit Test Exploration Results 打开该窗口

Resharper 单元测试探索

  • 测试输出日志帮助我在响应式调用堆栈深处找到了异常,因为我没有针对 Observable 的模拟。有时,使用 Rx 进行测试非常具有挑战性。但还是值得的。 (2认同)
  • 这是解决问题的好方法。就我而言,这是因为......“方法 ClassCleanup 有错误的签名”。 (2认同)

小智 12

安装Nunit3TestAdapterNuget 已经解决了这个问题


小智 11

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

在此处输入图片说明

  • 这就是我的修复方法,同时重新启动 VS 并删除 .vs 文件夹。谢谢。 (6认同)

use*_*722 9

为我修复的是升级 MS.Test nuget 包


ben*_*lum 8

检查测试编写的框架(例如nunit,xunit,VS test等),并确保安装了正确的测试适配器/运行器扩展.

对我来说,缺少NUnit 3测试适配器,我通过查看nunit.framework依赖版本确认了所需的版本号.

  • 自我注释:我原来的 MSTest 项目引用了“Microsoft.VisualStudio.QualityTools.UnitTestFramework”(不确定是哪个版本)。通过删除该引用并安装最新的(v2.1.0)MSTest.TestAdapter(和框架)解决了方法未运行(或找到)的问题 (6认同)

Ali*_*ati 8

就我而言,我有一个async void方法并替换为async Task,因此测试按我的预期运行:

    [TestMethod]
    public async  void SendTest(){}
Run Code Online (Sandbox Code Playgroud)

用。。。来代替 :

    [TestMethod]
    public async  Task SendTest(){}
Run Code Online (Sandbox Code Playgroud)


Net*_*oke 7

在此处输入图片说明

在测试资源管理器中为 AnyCPU 项目设置处理器架构修复了我的问题!见上面的截图。


Zac*_*Zac 7

我正在使用 XUnit,但缺少该xunit.runner.visualstudio包。安装它并运行我的测试。


fel*_*ixh 7

我通过运行带有 Blame 选项的测试 cli 设法找出 VS 2019/2022 跳过某些测试的原因:

vstest.console.exe myproject-test.dll /blame
Run Code Online (Sandbox Code Playgroud)

这将生成一个 xml 文件,其中包含一个带有“Completed=”False”的测试。

就我而言,测试主机进程由于运行该测试时发生内存访问冲突而崩溃。内存访问冲突是由无限递归引起的。您可以右键单击并调试该特定测试。


Eug*_*yeu 6

Clean-Rebuild solution worked for me.


vol*_*ody 6

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

dotnet test
Run Code Online (Sandbox Code Playgroud)

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

更新 Visual Studio 没有帮助。

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

Microsoft.NET.Test.Sdk
MSTest.TestAdapter
MSTest.TestFramework
Run Code Online (Sandbox Code Playgroud)


小智 6

对我来说,问题是我的ClassInit()方法没有正确的签名。

MSTest 类初始化和清理属性

特别要注意[ClassInitialize]ClassInit() 方法上的属性。

作品:

[ClassInitialize]
public static void ClassInit(TestContext context)
{

}
Run Code Online (Sandbox Code Playgroud)

不工作:

[ClassInitialize]
public void ClassInit(TestContext context)
{

}
Run Code Online (Sandbox Code Playgroud)

或者

[ClassInitialize]
public static void ClassInit()
{

}
Run Code Online (Sandbox Code Playgroud)

或者

[ClassInitialize]
public void ClassInit()
{

}
Run Code Online (Sandbox Code Playgroud)


Ste*_*veC 5

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

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


ElC*_*ado 5

对于 Visual Studio 2019 和针对 .NET 5.0 的测试项目,您还需要安装 xunit.runner.visualstudio。所以,你的包应该像这个例子一样:

  • xunit (2.4.1)
  • xunit.runner.visualstudio (2.4.3)