【问题标题】:Visual Studio "Debug Unit Test" fails to hit breakpointsVisual Studio“调试单元测试”未能命中断点
【发布时间】:2011-05-18 22:36:19
【问题描述】:

在使用 Visual Studio 2008 并调试我的单元测试时...有时调试器工作正常。然而,在修改了一些代码之后,通常单击“调试单元测试”Visual Studio 将无法命中代码中的断点。调试器基本上挂起,最终测试仍然使用新代码运行,但从未停止让我看看发生了什么。

我假设这与调试器完成的某种类型的程序集缓存有关,但无论我做什么(清理项目、删除 bin 文件夹、重新启动 VS 等)我都无法获得正确的程序集加载。有没有其他人看到过这种行为?有什么解决办法吗?

顺便说一句,在 Win XP 上使用 Resharper 4.5 和 .NET 3.5。

【问题讨论】:

  • 检查您的测试项目的引用程序集的位置!
  • 它直接引用了代码更改的项目。
  • 我在 VS2010 中看到了同样的行为 :(
  • 在 VS2010 中也发生在我身上,但是做一个 clean solution 似乎可以解决问题
  • 在 VS 2013 中使用 Resharper 10。这在以前从来不是问题,但是在重新映像我的机器之后,我有一个解决方案,总是这样做。我确定它与缓存的卷影副本有关。如果我进行任何代码更改并设置任何新断点,它们将不会在第一次被击中。我必须让它失败或杀死它,然后再做一次。断点总是被第二次击中。我认为它必须是某种设置,因为它只发生在我的机器上并且(我认为)只发生在这个解决方案中。

标签: .net visual-studio debugging visual-studio-2008 resharper


【解决方案1】:

如果您有 [HostType("ASP.NET")],请将其删除并测试 -> 调试 -> 再次运行测试

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,虽然我没有永久的解决方案,但这是一个快速的一次性解决方案: 调试单元测试(Ctrl-T、Ctrl-D),然后转到“立即窗口”,输入任何内容(例如 'a' 或 null)并按 Enter。在此之后,断点将被击中。

    【讨论】:

    • 对我不起作用。
    【解决方案3】:

    我只是在 VS2015 中遇到断点问题。

    我一直使用名为 Debug 的解决方案配置,但出于某种原因,我的解决方案设置为构建发布版本。

    在 Visual Studio 顶部的下拉菜单中从发布切换到调试解决了我的问题。

    【讨论】:

    • 当你注意到这一点时,它的绽放是如此明显。谢谢! :)
    • 其实我上周又犯了同样的错误。我通常从不切换到发布构建,但是构建服务器没有部署一些旧的解决方案,所以我必须在本地以发布模式构建解决方案。然后我忘了切换回来。
    • 是的,这里也一样。我通常也总是将它保存在调试中。我在谷歌上搜索 Nunit、Resharper 和 Nunit Tet Runner 周围的所有内容……没有意识到问题是一个愚蠢的下拉框!再次感谢
    【解决方案4】:

    现在我们在 Visual Studio 2017 15.5 和 Resharper 2017.2 中遇到了这个问题。 由 Resharper 引起的问题,在最新版本 2017.3+ 中解决

    link

    【讨论】:

    • 这为我修复了运行 VS 2017 v15.5.6
    【解决方案5】:

    从来自 ReSharper 的“单元测试会话”窗口(Resharper - Windows - 单元测试会话)开始调试时没有命中断点。

    但是当 从 VS 的“测试资源管理器”窗口(测试 - Windows - 测试资源管理器)开始测试时,它会遇到断点。

    VS Enterprise 2017 V15.5.6,ReSharper 2017.2.2

    最新的 ReSharper 2017.3.1 不是一个选项,因为它还有其他错误

    【讨论】:

      【解决方案6】:

      另一种解决方法:强制从单元测试中启动调试器:

      System.Diagnostics.Debugger.Launch();
      

      【讨论】:

        【解决方案7】:

        我在尝试调试测试方法时偶然发现的一个问题是它是私有的。只需将方法从 private 更改为 public 即可解决我的问题。

        我不知道为什么会出现这个问题,但它可能与NUnit的[Test]属性的实现有关。

        【讨论】:

        • 哇。感谢那。我创建了一个默认情况下未标记为“公共”的新类。一旦我添加了它,它就起作用了。你的回答让我想检查一下。
        【解决方案8】:

        我遇到的解决方案是:确保所有 nuget 包版本都匹配。我的单元测试项目使用的 Newtonsoft.Json 版本比我正在测试的项目中的 Newtonsoft.Json 引用更新。一旦我将所有 nuget 包更新到最新版本,我就能够打断点

        【讨论】:

        • 这对我来说很成功!
        【解决方案9】:

        确保您正在调试正确的测试!

        我有一些名称非常相似的测试,除了测试名称中的最后一个单词。 我在第一个测试中设置了断点,并在没有设置断点的第二个测试中使用 Visual Studios“测试资源管理器”窗口来“调试选定的测试”。

        测试名称

        PublishAsync_Valid_Acked
        PublishAsync_Valid_Nacked
        

        【讨论】:

          【解决方案10】:

          确保方法存在 [TestMethod] 属性,类存在 [TestClass]。

          【讨论】:

            【解决方案11】:

            如果你正在使用带有[TestInitialize]\[ClassInitialize]属性(mstest\nunit)的设置方法?尝试检查该设置代码是否已成功执行。

            例如:

            [TestInitialize]
            public void Setup()
            {
                throw new Exception();
            }
            
            [TestMethod]
            public void SomeFooTest()
            {
                //The breakpoint will "Fail" to hit here.
            }    
            

            在 Visual Studio 中,您可以使用测试资源管理器或 CodeLens(仅限专业版)轻松查看此行为:

            【讨论】:

              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

                右键单击 + 运行测试不会命中断点。

                右击+调试测试会!

                【讨论】:

                • 谢谢!我现在感觉很笨,我已经追了 20 分钟了!
                • @BillyWilloughby,不客气,我也有同感
                • 确实“运行测试”不应该调试测试,但无论我选择什么,调试器都无法附加。
                【解决方案14】:

                已经很晚了,但万一有人像我一样来到这里......

                我的测试不会遇到断点。我在测试中(下)进行了赤裸裸的测试,但仍然没有击中:

                    [Fact] // xunit, c#, vs 16.9.0
                    public void TestX()
                    {
                        var messages = new List<int>();
                        Assert.NotNull(messages);
                    }
                

                将相同的测试复制到不同的项目,直接命中断点。

                尝试了一些东西,然后发现了问题......

                在我的原始测试项目中,我引用了 SUT 项目,该项目具有从 SUT 复制的以下 SDK 包引用:

                <Project Sdk="Microsoft.NET.Sdk">
                  <ItemGroup>
                    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" />
                

                一旦我在我的测试项目中删除了这个,断点又被击中了!

                令人沮丧和浪费的时间,我没有,所以希望能帮助别人!

                【讨论】:

                • 这是为我做的。我在测试项目上安装了 Functions SDK。这就是我从解决方案端安装 nuget 包并选择所有项目的结果。如果您正在开发一个 azure 函数项目,请确保此 nuget 包未包含在您的 xunit 测试项目中。
                • 谢谢@GregoryBillings - 很高兴它帮助了你。当时让我很沮丧:)
                猜你喜欢
                • 1970-01-01
                • 2014-05-08
                • 1970-01-01
                • 2016-10-30
                • 2019-07-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多