【问题标题】:Visual Studio - suddenly cannot debug testsVisual Studio - 突然无法调试测试
【发布时间】:2013-08-04 03:26:48
【问题描述】:

我不确定我做了什么,但突然之间,我的 Visual Studio 2012 将无法调试任何测试。

如果我从 Test Explorer 中选择一个测试并告诉它运行,它只会在“测试输出”窗口中输出:

> ------ Discover test started ------
> ========== Discover test finished: 29 found (0:00:01.3371755) ==========
> ------ Run test started ------ Process with an Id of -1 is not running.
> ========== Run test finished: 0 run (0:00:01.4711861) ==========

这到底是什么意思?!这样做了几次后,错误变为:

The Operation was Cancelled

我确定没有这样做。

它对列表中的每个测试都执行此操作。

但是,我可以毫无问题地运行测试,并且它们通过了...但我无法调试测试。

我可能做了什么?我没有主动进入任何设置并更改任何内容,也许是某个地方的误点击,但在哪里?

【问题讨论】:

标签: visual-studio visual-studio-2012 visual-studio-2017 visual-studio-debugging vs-unit-testing-framework


【解决方案1】:

在我的情况下,它是具有引用 Microsoft.NET.Sdk.Function 的测试项目:

    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.0.1" />

一旦它被删除,调试器就会在断点设置处停止。

【讨论】:

    【解决方案2】:

    我在 Visual Studio 2019 中遇到了同样的问题。

    我使用 Visual Studio InstallerRepair 命令工作。

    【讨论】:

      【解决方案3】:

      我只是添加了xunit.runner.visualstudio(当时最新的稳定版本是 2.4.2),然后就成功了。

      【讨论】:

        【解决方案4】:

        对我来说,我去了测试探索 -> 设置 -> AnyCPUProjects 的处理器架构 并将其更改为 X64,它对我有用。

        【讨论】:

          【解决方案5】:

          就我而言,这是因为我使用非静态方法作为数据测试方法的动态数据源。

          【讨论】:

            【解决方案6】:

            在我的例子中,是 launchSettings.json 文件导致调试器无法命中断点。不确定为什么该文件出现在单元测试类型的项目中(可能是一些不需要的剩余部分),但是,xunit 似乎并没有忽略它。我只是删除了该文件,然后就可以再次调试单元测试了。

            环境:Microsoft Visual Studio Enterprise 2019 预览版(版本 16.8.0 预览版 3.1)

            【讨论】:

            • 谢谢 - 你 - 国王!
            【解决方案7】:

            对我来说,将 MSTest.TestAdapterMSTest.TestFramework Nuget 包更新到最新版本解决了这个问题。

            【讨论】:

            • 谢谢!在为此大惊小怪了几个小时后,这对我有用。
            【解决方案8】:

            就像你们一样,我无法在 Visual Studio 2019 16.6.2 中调试或运行我的 MSBuild 测试项目的单元测试。我想要进行单元测试的代码位于基于 .Net 4.6.2 的类库中。测试资源管理器始终使用下方的蓝色信息图标显示“测试未运行”。

            所以我只是尝试从我想要测试的方法的代码文件中创建一个新的单元测试 => 并且它成功了! 我经历的确切步骤:在 C# 文件中转到方法,右键单击它并选择“创建单元测试”并让对话框创建一个新项目。从我的原始文件中添加测试代码后一切正常,我能够调试和运行我的测试方法!

            希望这个简单的解决方案也能对你们中的一些人有所帮助。 最好的问候

            【讨论】:

              【解决方案9】:

              如果您在旧版 Visual Studio 中创建项目并且现在使用 VS 2019,则必须安装 Microsoft.VisualStudio.TestPlatform 库并更新其他库。

              【讨论】:

                【解决方案10】:

                我刚刚遇到了一个类似的问题,NUnits TimeoutAttribute 在没有有意义的消息的情况下调试时导致测试被取消。

                从测试中删除属性修复了问题。

                【讨论】:

                  【解决方案11】:

                  建议的解决方案都不适合我。对我有用的是将单元测试项目和所有依赖项目的平台目标更改为 Any CPU 而不是 x64 这是某种解决方法而不是真正的修复!

                  编辑

                  单元测试项目的目标平台可以通过测试设置而不是项目属性进行更改。更多信息请参考this answer

                  【讨论】:

                  • 非常感谢!我将所有项目都更改为 Any CPU 并正常工作!
                  • @HernaldoGonzalez 很高兴听到这个消息!很高兴破解我的朋友 :))
                  【解决方案12】:

                  在我的例子中,我的符号没有被加载。

                  我必须转到工具 -> 选项 -> 调试 -> 并选择“加载所有模块,除非排除”才能命中断点。

                  【讨论】:

                    【解决方案13】:

                    对我来说,以下工作:

                    1. 关闭解决方案
                    2. 关闭 Visual Studio
                    3. 删除内容 "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET 文件\"
                    4. 删除内容 "C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET 文件\"
                    5. 打开 Visual Studio
                    6. 打开解决方案

                    【讨论】:

                      【解决方案14】:

                      这可能不是专门针对您的问题的解决方案,但我也无法调试我编写的测试。原来解决方案很简单:

                      将方法从private 更改为public。我不知道为什么不能在私有方法中进行调试,但这可能与 [Test] 属性的实现有关。希望这对以后遇到类似问题的人有所帮助!

                      【讨论】:

                        【解决方案15】:

                        我无法附加到我的调试器,因为它正在寻找测试设置文件。
                        如果这是您的问题,请转到测试->测试设置->取消选中 Local.testsettings 选项

                        【讨论】:

                        • 投反对票的原因是什么?如果您引用不存在的测试设置,那么它将导致调试单元测试出现问题。更多信息在这里:msdn.microsoft.com/en-us/library/…
                        • 对于这个症状似乎有很多问题和相关的解决方案,但这个是帮助我的。在 VS2017 中禁用运行设置文件有效。谢谢!
                        【解决方案16】:

                        在我的情况下,如果存在构建警告,则无法命中断点。 我可以通过切换带有警告的代码行来验证这一点。这是一个未使用的字符串,长度为 66000。 (警告 CS0219 变量 'XXXXXXX' 已赋值,但从未使用过它的值)

                        我猜编译器删除了这一行,所以符号映射失败了?

                        【讨论】:

                          【解决方案17】:

                          从 Visual Studio 2017 (15.8) 开始,当 Live Unit Testing 功能处于活动状态时,可能会发生这种情况。输出中没有明确的信息;它只是在没有调试的情况下启动和停止。解决方案是停止实时测试,以便您可以正常调试测试。

                          【讨论】:

                          • 我什至必须在停用实时测试后重建项目。之后,每个测试都显示一个蓝色的感叹号,并且再次调试。
                          【解决方案18】:

                          app.config 问题参考可能会在调试测试项目时无意中导致调试器不附加和断点不命中。此文件可能已被软件包更新或已过期。

                          解决方案:我通常从测试项目的 app.config 中复制然后删除运行时标记下的所有依赖项。调试通常在此之后开始工作,但如果找不到程序集,可能需要添加一些引用。

                          【讨论】:

                            【解决方案19】:

                            解决方案: 选择“调试单元测试”或“运行单元测试”而不是“调试测试”或“运行测试”。

                            【讨论】:

                              【解决方案20】:

                              检查测试项目和主项目是否使用相同的框架版本。

                              【讨论】:

                                【解决方案21】:

                                确保您的测试项目是要构建的项目的一部分。

                                • 解决方案资源管理器右键单击您的解决方案
                                • 转到设置启动项目..
                                • 点击配置属性并确保您的测试项目已检查构建

                                【讨论】:

                                • 如果您使用的是部署工具 - 而不是为 CI/CD 进行测试 - 您可能必须取消选中单元测试项目 - 为您的 CI/CD 以及添加新测试时 - 您必须再次为您的单元测试重新检查它 - 在添加新测试时会收到警告 - 但您必须手动检查它是否在您的 Debug 版本中检查。
                                【解决方案22】:

                                异步测试 - 我的场景中的症状相似,因为我的测试没有执行并且我的断点没有被命中。 Visual Studio 中的测试资源管理器可以看到测试,但我无法调试它。即使在测试资源管理器中可以看到它,运行它也好像找不到它。

                                如果它对其他人有帮助,我的问题很简单,只需将测试方法的签名从“async void”更改为“async Task”。 p>

                                这样做:

                                [TestMethod]
                                public async Task CorrectlyFailingTest()
                                {
                                  await SystemUnderTest.FailAsync();
                                }
                                

                                不是这个:

                                [TestMethod]
                                public async void CorrectlyFailingTest()
                                {
                                  await SystemUnderTest.FailAsync();
                                }
                                

                                【讨论】:

                                • 这是我在 VS2019 上的案例,效果很好。
                                【解决方案23】:

                                对我来说,问题是在升级到 2017 v15.5.7 后,我的解决方案的属性以某种方式发生了变化。这使得我可以在调试模式下运行一次测试,但不能再次运行,除非我重新启动 VS,否则它会再次运行一次。一旦我把它放回去,它就会再次工作。对我来说,该设置是并且应该是解决方案 > 通用属性 > 启动项目 > 多个启动项目。不知何故,它被设置为“单一启动项目”。

                                【讨论】:

                                  【解决方案24】:

                                  点击“运行测试”不会触发刹车点。

                                  调试代码并在测试中的断点处停止:

                                  右键单击 > 调试测试

                                  “测试”选项卡 > 调试 > 所有测试

                                  【讨论】:

                                    【解决方案25】:

                                    我今天遇到了这个。我尝试关闭解决方案,但没有奏效。我的错误是我将解决方案设置为发布模式而不是调试模式。我将它设置为调试,然后它按预期工作。

                                    我正在使用 VS 2015 专业版。

                                    【讨论】:

                                    • 如果可以,我现在就拥抱你。这让我烦恼了好几个小时,哈哈。
                                    • 我突然变得如此愚蠢......
                                    【解决方案26】:

                                    请按照以下步骤操作。它对我有用

                                    步骤。

                                    1.关闭您的 Visual Studio 实例

                                    2.清理临时文件和预取文件。

                                    3.删除项目bin文件夹中的文件。

                                    4.重新启动应用程序。

                                    【讨论】:

                                    • 关闭我所有的视觉工作室并清除 temp 并删除 bin 和 obj 文件夹对我有用,谢谢
                                    • 我不确定第 2 步,所以我跳过它,继续第 3 步然后第 4 步,问题解决了。谢谢@Om Sao ...
                                    • 和@swathi cv !!
                                    【解决方案27】:

                                    当我使用 Visual Studio 2012 时,由于某些原因,如果我使用快捷键 ctrl R+T,它会遇到断点。但是,如果我在测试资源管理器上单击“全部运行”或“运行选定的测试”,则不会。不过,Visual Studio 2013 两种方式都可以正常工作。

                                    【讨论】:

                                    • 你真的用过Ctrl+R、Ctrl+T(这是Debug,不是Run)吗?对于 Run,预计不会在断点处停止。
                                    【解决方案28】:

                                    对我来说,问题是我的配置文件 (app.config) 没有调试转换文件 (app.Debug.config),一旦我添加它再次开始工作/调试。

                                    【讨论】:

                                      【解决方案29】:

                                      我在 VS2015 中遇到了类似的问题。在我的情况下,只有一个单元测试无法调试。调试器会初始化一个测试,但不会调试测试本身,很好地退出。 问题在于 Resharper 在没有为项目启用 NuGet 包的情况下导入 Newtonsoft.Json 库。 (我用Alt+Enter自动导入库)

                                      解决方案是为测试项目安装 Newtonsoft.Json NuGet 包。

                                      【讨论】:

                                        【解决方案30】:

                                        Visual Studio 2012 经常遇到同样的问题。

                                        解决方案:关闭当前解决方案并重新打开它

                                        在我的情况下,没有必要关闭和重新打开 VS。

                                        【讨论】:

                                        • 即使是“IT 人群”也能解决这个问题!它对我有用
                                        • 在 VS 2017 中为我工作。对我来说,导致问题的原因是停止调试;我必须让调试会话运行完成,否则它会破坏调试测试命令。
                                        猜你喜欢
                                        • 2012-11-19
                                        • 2018-12-05
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2014-04-26
                                        • 2020-06-09
                                        相关资源
                                        最近更新 更多