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

时间:2014-04-29 11:14:07

标签: visual-studio unit-testing visual-studio-2012 resharper

我目前正在开发一个目前有32个单元测试的解决方案。我一直在使用resharper测试运行器 - 工作正常。所有测试都在运行,所有测试都显示正确的测试结果。现在一位同事告诉我,使用Visual Studio测试资源管理器测试并没有在他的机器上运行。他们不在我的机器上工作,所以我可以排除一些本地丢失的文件或其他东西。

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

enter image description here

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

我会谴责任何可能导致这种行为的提示。

59 个答案:

答案 0 :(得分:65)

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

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

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

  3. 我发现当这些与我的测试项目不匹配时,它会无声地运行。

答案 1 :(得分:30)

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

答案 2 :(得分:10)

如果您使用的是NUnit而不是MSTest,那么Visual Studio 2012/2013将需要NUnit Test Adapter Extension

答案 3 :(得分:7)

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

show output from


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

Resharper output

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

Resharper Unit Test Exploration

答案 4 :(得分:7)

enter image description here

在Test Explorer中为AnyCPU项目设置处理器体系结构解决了我的问题!参见上面的截图。

答案 5 :(得分:6)

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

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

答案 6 :(得分:5)

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

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

答案 7 :(得分:5)

安装Nunit3TestAdapter Nuget已解决了该问题

答案 8 :(得分:4)

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

  • MSTest.TestAdapter
  • MSTest.TestFramework

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

答案 9 :(得分:3)

我有同样的症状。

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

然后清理解决方案并重建它。

如果仍然没有帮助,请清除临时目录(在“开始”菜单中搜索%temp%并删除Temp中的所有内容)

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

答案 10 :(得分:3)

  

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

我为此苦了一天半。所以这是我要解决的问题:

症状

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

调查

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

自然地,我进入了 VS 2019 中的-> 输出控制台-> 测试下拉列表,并查看了输出。那里没用。

解决方案之一:将 MSTest.TestAdapter MSTest.TestFramework 更新到版本 2.0.0 >

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

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

  1. System.Runtime.Extensions
  2. System.Reflection
  3. 也许我想念更多

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

我希望这会对其他人有所帮助。

答案 11 :(得分:3)

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

dotnet test

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

更新Visual Studio没有帮助。

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

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

答案 12 :(得分:3)

我的情况略有不同,但这是Google的最高结果,所以我也将回答我的问题。我可以运行测试,但是实际上只有大约一半运行了,没有错误输出。

最终,我调试并逐步完成了所有测试,并在创建某些模型的测试实例时遇到了Stack Overflow Error

在测试实例方法中,子模型创建了父级,而父模型创建了子级,从而创建了无限循环。我从孩子那里删除了父创建的东西,现在我所有的测试都能正常工作!

答案 13 :(得分:3)

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

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

答案 14 :(得分:2)

我有不同的解决方案来运行测试。我的全局软件包文件夹与.csproj中的不匹配 这是我的.csproj的样子: UnitTest .csproj

我必须将我的版本更改为16.5.0,我发现它已安装在我的全局包文件夹中。现在我的测试可以运行了:.nuget folder explorer

答案 15 :(得分:2)

这个问题已经有很多答案,但是我有不同的情况和解决方案。

我们将要测试的类型的功能从一个类移到了一个新类,因此创建了一个新的测试类,而旧的测试类最终为空。

原文:

  • 旧考试班
    • 测试初始化​​方法
    • 测试方法

损坏:

  • 旧测试类(保留初始化程序,保留类作为将来的占位符)
    • 测试初始化​​方法(仍然存在)
    • 没有测试方法(原始测试方法出现在测试运行器中,但不存在于代码中,因此从不执行)
  • 新考试班
    • 测试初始化​​方法
    • 测试方法

已修复:

  • 旧测试类(已删除)
  • 新考试班
    • 测试初始化​​方法
    • 测试方法

清理项目,关闭Visual Studio,删除TestResults文件夹,然后重新启动VS,然后重新生成项目。 (仅此一项就可以解决您的问题,但对我而言,直到删除旧的测试类才够用。)

答案 16 :(得分:2)

当正在运行的测试方法抛出StackOverflowException,使测试运行程序中止测试运行并导致输出0 tests run时,也会观察到此问题。

要找到问题的根源并解决,请在TestInitializeTestMethod装饰方法的开头都设置一个断点,在调试模式下运行单元测试,继续执行(F10),直到出现异常被抛出。

答案 17 :(得分:1)

我将“调试”更改为“发布”,并且再次起作用(任何CPU。)

答案 18 :(得分:1)

对我有用的是删除bin文件夹,然后重建项目。

答案 19 :(得分:1)

好吧,我知道我参加聚会迟到了,但是在这里记录我的答案,以防万一有人面临与我类似的问题。我多次遇到过这个问题。这两个步骤90%都解决了

project > properties > Build > Platform target > x64 (x32)

Test -> Test Settings > Default Processor Architecture > X64 (x32)

但是我发现了一个更常见的原因。解决方案文件经常更改开发人员系统,并且它们开始指向错误的 MSTest.TestAdapter。特别是如果您使用 nuget 包的自定义路径。 我通过

解决了这个问题
  1. 在记事本中打开 .csproj 文件。

  2. 在导入时手动更正对 MSTest.TestAdapter 的引用 像这样的说明。

答案 20 :(得分:1)

确保您将测试项目与您的主应用程序项目一起引用。

答案 21 :(得分:1)

我设法找出了 VS 2019/2022 跳过一些测试的原因,方法是运行带有blame 选项的测试 cli:

vstest.console.exe myproject-test.dll /blame

这将生成一个带有“Completed="False”的测试的 xml 文件。

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

答案 22 :(得分:1)

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

enter image description here

答案 23 :(得分:1)

值得一提的是,有时NUnit Test Adapter文件在用户文件夹中被损坏 C:\ Users [用户] \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \ NUnit3TestAdapter.3.8.0 / build / net35 / NUnit3.TestAdapter.dll 在Windows 10上运行,这会导致Test Explorer停止正常工作。

答案 24 :(得分:1)

也许这是一个无限循环。

我几乎有一半的测试没有运行。我对代码所做的新更改带来了创建无限循环的测试。解决此问题(向正确的方法调用添加正确的参数)后,每个测试都正常运行。

希望这可以帮助任何人 - 如果您要向其他人的代码添加新逻辑,请尝试调试未运行的测试,也许您也遇到了无限循环,而 VS 只是停止了测试。

答案 25 :(得分:1)

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

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

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

答案 26 :(得分:1)

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

Build-> Configuration Manager ...->检查测试项目的构建

答案 27 :(得分: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() {}
}

答案 28 :(得分:1)

对我来说,解决该问题的方法是升级MS.Test nuget程序包

答案 29 :(得分:0)

自从出现此类错误以来,我发布了问题/解决方案:

症状:

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

问题:

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

答案 30 :(得分:0)

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

enter image description here

答案 31 :(得分:0)

对我来说(不是一个解决方案),它是在菜单[测试]-> [测试设置]-> [{当前文件}]中取消选择.testsettings文件,以取消选中当前使用的文件。

在我看来,它是这样开始的。

<TestSettings name="Local (with code coverage)" id="e81d13d9-42d0-41b9-8f31-f719648d8d2d" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Deployment>
    <DeploymentItem filename="ConfigurationImportExportTest\Configurations\" />
    <DeploymentItem filename="output\Debug\" />
  </Deployment>
  <Execution>

显然,DeploymentItem会干扰。

因为这在“输出”标签中:

Warning: Test Run deployment issue: The assembly or module 'Microsoft.SqlServer.Management.SqlParser' directly or indirectly referenced by deployment item 'output\Debug\' specified by the test settings was not found.
.... more of the same

这并不能告诉我很多事情。
似乎这与所有项目将其编译产品放在一个公用\output\Debug文件夹中的方式有​​关

但是这似乎并没有阻碍它。 它发出了另一条警告,提示诸如

A testsettings or runsettings file with `ForcedLegacyMode = TRUE or VSMDI files are not supported by MSTest-V2.

那似乎阻止了它。

答案 32 :(得分:0)

相同的问题。实际发生的是,正在运行的测试试图发现我已加载的网站项目中的测试(该网站内部存在一些有关角度角度的茉莉花规格)。

enter image description here

这导致跑步者在试图加载一些NodeJS容器时挂起

从Microsoft.NodejsTools.TestAdapter.TestContainer更新容器

enter image description here

我从解决方案中删除了网站(显然,只是解决方案,而不是删除网站!)

我还必须清除.vs目录中TestStore文件夹下的一些损坏的配置数据。

Deleting the corrupted cache started the tests working again

完成这两个步骤后,事情神奇地重新开始工作

答案 33 :(得分:0)

还有另一个荒谬的案例:同一解决方案中的两个项目以某种方式发生了相同的ProjectId-其中一个是测试项目,并且使Test Runner感到困惑。

将测试项目删除和读取到解决方案后,更改了ProjectId并解决了问题。

答案 34 :(得分:0)

我添加了 <PackageReference Include="NUnit3TestAdapter" Version="3.16.1"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference>

在我的 Test.csproj 文件中

答案 35 :(得分:0)

我也遇到了这个问题,我的解决方案是我需要将测试类设为“公开”。 我通过 VS2019 通过创建单元测试向导创建了测试类,默认情况下它不公开。

答案 36 :(得分:0)

我在 Visual Studio 2019 Community 版本 16.9.1 中使用 selenium NUnit 测试时也遇到了这个问题。一些建议是使用旧版本。但就我而言,实际的解决方案是将 Microsoft.NET.Test.Sdk" Version="16.0.1" 包添加到项目中。

Packages included in my project

答案 37 :(得分:0)

我从测试资源管理器中选择了“调试选定的测试”而不是“运行选定的测试”。

答案 38 :(得分:0)

根据安装的运行时,您可能需要选择:

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

将其设置为 x64 会导致“找不到框架‘Microsoft.NETCore.App’,版本‘3.1.0’。”测试错误输出中的错误。

答案 39 :(得分:0)

请确保您选择了正确的项目类型。就我而言,我选择了“单元测试项目”,我应该有“xUnit 测试项目”。 enter image description here

答案 40 :(得分:0)

我遇到了类似的问题,尝试了所有发布的解决方案,但没有成功。 2 天后最终确定是 OneDrive 导致了问题。

关闭 OneDrive,稍等片刻,重新启动 VS,BAM 又开始工作了!

答案 41 :(得分:0)

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

答案 42 :(得分:0)

在我的情况下,我有一个async void方法,我用async Task代替了,所以测试按预期运行:

    [TestMethod]
    public async  void SendTest(){}

替换为:

    [TestMethod]
    public async  Task SendTest(){}

答案 43 :(得分:0)

检入项目文件以获取对不同版本的NUnit的引用:

就我而言,我已经安装了NUnitNUnit3TestAdapter3.11.0版本,但是在项目文件中有旧版本的2.6.4引用。不会随新安装一起删除。

  • 解决方案(建议解决参考问题,请参见docs):

    重新安装NUnitNUnit3TestAdapter,这修复了我项目中的引用。
PM> Update-Package NUnit -reinstall
...
PM> Update-Package NUnit3TestAdapter -reinstall
  • 解决方案2(如果重新安装未能解决参考问题):

    卸载并安装NUnitNUnit3TestAdapter
PM> Uninstall-Package NUnit
...
PM> Uninstall-Package NUnit3TestAdapter
...
PM> Install-Package NUnit
...
PM> Install-Package NUnit3TestAdapter

答案 44 :(得分:0)

Clean-Rebuild解决方案对我有用。

答案 45 :(得分:0)

在解决方案资源管理器中右键单击该文件,并确保将其构建操作设置为“ C#编译器”

解决方案资源管理器-> 右键单击文件-> “属性” -> 构建操作=“ C#编译器”

enter image description here

答案 46 :(得分:0)

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

答案 47 :(得分:0)

对我来说,这是由于 VS扩展来衡量代码覆盖率。它无法引用特定的程序集,因此将无法运行任何测试。使用以下命令,可以从命令行正常运行测试:

dotnet test

要解决此问题,您可以选择将 ALL 依赖项复制到Test项目的调试文件夹中。这样可以确保可以解析任何程序集,因为不会删除“未使用”的程序集。您可以将以下内容添加到您的Test项目.csprog文件中:

<PropertyGroup>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

答案 48 :(得分:0)

我有不同版本的NUnit(3.11.0)和NunitTestAdapter(3.12.0)nuget软件包。当我将NUnit更新为3.12.0时,Visual Studio进行了测试。

答案 49 :(得分:0)

我遇到了同样的问题,但是当我在实际桌面上创建工作副本时,我的问题得到解决。我遇到的问题是因为项目文件夹位于网络驱动器上,并且由于某种原因无法在网络驱动器上加载依赖项。希望这对某人有帮助。

答案 50 :(得分:0)

使用.Net Core / xUnit / FluentAssertions堆栈时,我的症状与OriolBG类似,但是对于我来说,为项目更新Microsoft.NET.Test.Sdk nuget包确实有用。

答案 51 :(得分:0)

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

答案 52 :(得分:0)

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

Unit tests not run with wrong assembly

With the right assembly, the tests run

答案 53 :(得分:0)

我解决的问题与这里的任何解决方案完全不同:

我的每个测试都调用了一个函数,该函数又调用了它自己,这意味着它不会终止:

public GoogleIntent CreateIntent(BotPath botpath)
{
    return CreateIntent(botpath);
}

答案 54 :(得分:0)

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

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

答案 55 :(得分:0)

更新到Visual Studio 16.4.1之后,我遇到了同样的问题。 转到测试资源管理器->设置按钮-> AnyCPU项目的处理器体系结构-> x64

答案 56 :(得分:0)

将测试项目升级到最新的目标框架版本。

我正在使用Visual Studio 2019和目标框架4.5,该框架的支持在2016年终止,跳转到4.7解决了我的问题。

答案 57 :(得分:-1)

这在 VS2019 中对我有用。

将测试移至新的 NUnit 3 测试项目。所有测试按原样运行。

答案 58 :(得分:-2)

尝试从测试方法上方删除[Ignore]属性。