【问题标题】:Tests not running in Test Explorer未在测试资源管理器中运行的测试
【发布时间】:2014-06-15 07:08:00
【问题描述】:

我目前正在研究一个目前有 32 个单元测试的解决方案。我一直在使用 resharper 测试运行器 - 效果很好。所有测试都在运行,所有测试都显示正确的测试结果。

但是,当使用 Visual Studio 测试资源管理器时,测试没有运行。

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

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

如果有任何可以解释这种行为的提示,我将不胜感激。

【问题讨论】:

  • 更新您的 ReSharper。参考这个stackoverflow.com/questions/16011775/…
  • 如果 VS 说为什么没有运行测试不是很好吗?目标平台不匹配,缺少测试适配器,... :(
  • 哪里提到他们使用 ReSharper ?
  • @BernhardHofmann 我现在遇到了这样的问题,结果发现 VS 在输出 > 测试中吐出了一些错误消息。重要的。令人沮丧的是 VS 并没有让它们更明显,但在这种情况下,这是一个值得关注的地方。
  • 今年是 2020 年,距离这个问题已有 5 年了,在尝试了 10 个不同的答案之后,我仍然无法运行 nunit 测试。创建一个控制台项目来运行测试代码。叹息

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


【解决方案1】:

如果您使用的是 NUnit 而不是 MSTest,那么对于 Visual Studio ≥ 2012/2013,您将需要 NUnit 2 Test AdapterNUnit 3 Test Adapter

【讨论】:

  • 这帮助我确定我需要安装“NUnit 3 测试适配器”:marketplace.visualstudio.com/…
  • 在 VS 2019 中,我从包管理器 nuget.org/packages/NUnit3TestAdapter 安装了适配器
  • 根据this page你还需要从Nuget安装Microsoft.NET.Test.Sdk
  • 在 VS 2019 中,我还安装了 Extension Nunit 3 测试适配器并且它工作正常。注意:我还需要更新 Visual Studio。
  • +1 谢谢!即使使用最新版本的 VS 2019 16.5.5,我也没有收到任何表明问题所在的消息。它默默地失败了。
【解决方案2】:

我有同样的症状。

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

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

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

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

【讨论】:

  • 卸载 Resharper?!我不认为这是一个解决方案^^
【解决方案3】:

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

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

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

我发现当这些不匹配时,我的测试项目会默默地运行失败。

【讨论】:

  • 这个解决了我的问题(从混合平台切换到 anycpu)
  • 确保您的测试项目不是 netstandard2.0 而是 netcoreapp2.2
  • 工作。我真的与 VS 会,你知道,给我们一个明确的警告或错误信息之类的。
  • 暂时更改值并将它们更改回任何 CPU,然后点击保存为我修复了它。在最初在 VS 2017 中创建的项目中使用 VS 2019 社区版。
  • VS2019 版本:主菜单 -> 测试 -> AnyCPU 项目的处理器架构 -> X64。
【解决方案4】:

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

【讨论】:

  • 我之前关于我为什么投反对票的评论已被删除,所以我会更清楚一点。这不是问题的解决方案。这是一个非常临时的修复程序,不能解决根本问题。我认为 SO 不应该是一个人们应该被告知“关闭再打开”的地方,这是在你到达这里之前要学习的知识。请参阅 Joseph Simpson 的答案以获得解决方案。
  • @lukkea 我按照约瑟夫辛普森的回答并确认,我所有的项目都在 AnyCpu.我仍然遇到这里描述的问题。对我来说,只需重新启动 VS 就有帮助。这不是 VS2012 第一次出现这种问题(不仅在我的机器上)。我同意你的观点,这不是一个好的解决方案,但如果项目没有问题,那可能是唯一的帮助。不过,应该检查清理重建是否也无济于事。
  • 如果只有“再次打开和关闭”就能解决我的所有问题。仍然令人惊讶它确实修复了多少。我不得不去stackoverflow提醒这样做有点尴尬,但我发现这个答案很有用。
  • @lukka 有时 Visual Studio 是根本问题,重启是解决方案
  • 对我来说,我必须安装与我的 xunit 版本匹配的 xunit 测试运行器。然后重新启动视觉工作室。然后它工作了
【解决方案5】:

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

【讨论】:

  • 这解决了我的 .NET Core 3.1 项目拒绝在测试资源管理器中执行测试的问题。除了这个,别无他法。
【解决方案6】:

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

测试随后在测试资源管理器中处于活动状态并可运行。

【讨论】:

  • 无法等待异步 void 方法完成。 Async void 是“一劳永逸”。这就是为什么它们不能被测试。
  • 当我读到这篇文章时,我的捂脸在整个土地上回荡……感谢您指出我的愚蠢。这对我有用。赞成
  • 虽然归档在“no duh”类别下。我希望这可以得到更多的投票,因为它非常明显,您的返回类型必须是 Task 但很容易忘记(因为世界上似乎没有其他单元测试返回任何内容,但 void )并将您送入修复您的单元的兔子洞在没有实际配置问题的情况下测试配置。真希望这只是导致编译器或至少引发运行时错误。
  • @pat8719,对于代码分析器来说,这听起来是个好主意。它们并不难写。我刚刚写了一个 xunit 事实在做async void Foo(),他们的分析器没有抱怨,但他们当然可以添加一个。抄送:@bradwilson
  • 这也是我的问题。不过,在 VS 2019 中,Xunit 似乎没有发生这种情况。但是在使用 MsTest + async void 时总是会发生。
【解决方案7】:

检查测试所针对的框架(例如 nunit、xunit、VS 测试等),并确保您安装了正确的测试适配器/运行器扩展。

对我来说,缺少 NUnit 3 测试适配器,我通过查看 nunit.framework 依赖版本确认了所需的版本号(在解决方案资源管理器的依赖树中选择 .dll 并按 F4 以显示属性窗口)。

【讨论】:

  • 自我注意:我原来的 MSTest 项目参考了Microsoft.VisualStudio.QualityTools.UnitTestFramework(不确定哪个版本)。通过删除该 ref 并安装最新的 (v2.1.0) MSTest.TestAdapter(和框架)解决了方法无法运行(或找到)的问题
  • @AdamCox Microsoft.VisualStudio.TestTools.UnitTesting 是否已弃用?我有一些使用它的测试在重新添加一些对他们依赖的项目的引用后突然停止运行。
  • @ebyrob,Athanasios 下面的回答可能是相关的。似乎他不仅需要升级/升级到 MSTest.* 包,还需要添加一些依赖项并修复一些绑定重定向。检查您的警告输出。
【解决方案8】:

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

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

【讨论】:

  • 在我的情况下正好相反:任何具有 MSTest nuget 包的单元测试项目都不会运行,就像其他项目一样。奇怪。
  • 已解决:我有一个 .testsettings 文件。 MSTest 包需要一个 .runsettings 文件。这就是测试没有运行的原因。
【解决方案9】:

对我来说,重新启动 VS2017 不起作用。我必须清理 sln 然后找到一个包含未运行的测试的文件并仅运行该文件。之后我确实运行了所有,它又正常工作了。

【讨论】:

    【解决方案10】:

    这里是测试项目没有被标记为要构建:

    构建 -> 配置管理器... -> 检查测试项目的构建

    【讨论】:

      【解决方案11】:

      为我解决的问题是升级 MS.Test nuget 包

      【讨论】:

      • 是的,例如升级到 .NET 6 时;一切仍会编译,但这些包也需要升级
      【解决方案12】:

      对我来说(不是一个解决方案),它是在菜单 [Test]->[Test Settings]->[{current File}] 中取消选择 .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.
      

      这似乎停止了它。

      【讨论】:

        【解决方案13】:

        因为我遇到这种错误,所以我发布了我的问题/解决方案:

        症状:

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

        问题:

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

        【讨论】:

        • +1 我试图调试一个特定的测试。当我最终运行另一个更简单的测试时,我可以调试特定的测试。这个答案让我尝试了。
        【解决方案14】:

        在你的项目文件中检查对不同版本 NUnit 的引用:

        在我的例子中,我安装了NUnitNUnit3TestAdapter 的版本3.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
        

        【讨论】:

          【解决方案15】:

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

          【讨论】:

            【解决方案16】:

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

            dotnet test
            

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

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

            【讨论】:

              【解决方案17】:

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

              【讨论】:

              • 测试在 Resharper 测试运行器中运行的事实表明它们没有 [Ignore] 属性。
              【解决方案18】:

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

              【讨论】:

                【解决方案19】:

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

                【讨论】:

                • 我可以确认这是可行的。至少对我来说。我的测试实际上都在工作,然后在开发过程中他们停止并且无法启动。我尝试了上面的几个建议:没有。为我更新所有测试包恢复功能。
                【解决方案20】:

                对我来说,在基类中有一个名为 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() {}
                }
                

                【讨论】:

                • 我遇到了类似的问题。 TestContext 需要是一个公共属性,以便测试运行程序可以为其分配一个新的上下文。
                【解决方案21】:

                我发现在项目中它没有引用 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 后,我的测试不再运行。经过数小时的尝试,只有这个解决方案对我有用。
                • 从 .NET Framework 4.6.2 切换到 .NET Framework 4.7.2 后 - 我不得不删除 app.config 中的所有绑定重定向
                • 这也为我解决了问题!我还不断尝试并从这篇文章中意识到,当您创建 MSTest UnitTest 时,Microsoft 似乎向项目添加了错误的引用,而当您在 Visual Studio 中运行时它无法识别。非常感谢您解决这个问题!
                • 这对我有用,一个很好的解决方案。我们的测试什么都不做。我们删除了这两个并包含了一个,它运行良好。
                【解决方案22】:

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

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

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

                【讨论】:

                  【解决方案23】:

                  有相同的症状,在我的情况下,问题出在 dotnet core SDK 版本

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

                  【讨论】:

                    【解决方案24】:

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

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

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

                    【讨论】:

                      【解决方案25】:

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

                          [TestMethod]
                          public async  void SendTest(){}
                      

                      替换为:

                          [TestMethod]
                          public async  Task SendTest(){}
                      

                      【讨论】:

                        【解决方案26】:

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

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

                        症状

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

                        调查

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

                        我自然去了 VS 2019 中的 -> Output console -> Test dropdown 并查看了输出。那里没什么用处。

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

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

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

                        1. System.Runtime.Extensions
                        2. System.Reflection
                        3. 也许我还缺少一些东西

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

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

                        【讨论】:

                        • 你救了我一天半!我升级了一个 4.5 FW 版本的项目,并尝试从包中删除所有不必要的东西,结果出现了这种情况。谢谢!
                        • 我想我正在经历类似的事情。最终,我只是从头开始重新创建了该项目。显然,*.csproj 文件中有一行设置了ToolsVersion,并且撞到我的东西搞砸了。对于 MS 单元测试,我只能说“买家要小心”,并准备好立即替换您的 *.csproj 文件,这些东西是紧密集成的并且非常依赖于版本。
                        • 谢谢,虽然不是直接我的问题,但检查控制台输出的提示向我显示了阻止我的测试运行的错误(DBContext Dispose 方法有错误)。
                        • 不错。我已经有了 MS Test 2.x,但是将测试包更新到最新版本 (2.2.7) 仍然为我修复了它。
                        【解决方案27】:

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

                        • MSTest.TestAdapter
                        • MSTest.TestFramework

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

                        【讨论】:

                        • 这个答案帮助我找到了类似的原因。在我的情况下,一些测试项目引用了 Microsoft.VisualStudio.TestPlatform.TestFramework(并且没有运行),而其他测试项目引用了 Microsoft.VisualStudio.QualaityTools.UnitTestFramework(这些项目将运行)。
                        【解决方案28】:

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

                        我使用 Visual Studio 2019 和目标框架 4.5,其支持于 2016 年结束,跳到 4.7 解决了我的问题。

                        【讨论】:

                          【解决方案29】:

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

                          【讨论】:

                            【解决方案30】:

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

                            【讨论】:

                              猜你喜欢
                              • 2020-05-13
                              • 1970-01-01
                              • 2020-09-13
                              • 1970-01-01
                              • 2016-12-02
                              • 2022-12-11
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多