Visual Studio“调试单元测试”无法达到断点

时间:2010-12-02 05:53:11

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

使用Visual Studio 2008并调试我的单元测试时......有时调试器工作正常。但是,在修改某些代码之后,经常单击“调试单元测试”Visual Studio将无法访问代码中的断点。调试器基本上都会挂起,最终测试会以新代码运行,但永远不会让我看到发生了什么。

我认为这与调试器完成的某种类型的汇编缓存有关,但不管我做什么(清理项目,删除bin文件夹,重启VS等)我永远无法得到正确的程序集加载。有没有人见过这种行为?任何解决方案?

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

14 个答案:

答案 0 :(得分:43)

我在VS2015遇到断点时遇到了问题。

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

在Visual Studio顶部的下拉列表中从Release切换到Debug修复了我的问题。

答案 1 :(得分:2)

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

中解决

link

答案 2 :(得分:2)

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

System.Diagnostics.Debugger.Launch();

答案 3 :(得分:2)

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

右键单击 + 调试测试将!

答案 4 :(得分:1)

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

答案 5 :(得分:1)

从ReSharper的“单元测试会话”窗口(Resharper - Windows - 单元测试会话)开始调试时,不会触发断点。

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

VS Enterprise 2017 V15.5.6,ReSharper 2017.2.2

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

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

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

我的测试不会遇到断点。我在测试中裸奔(下图)但仍然没有击中:

    [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" />

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

碰巧对我来说是解决方案:确保所有nuget软件包版本都匹配。我的单元测试项目使用的Newtonsoft.Json版本比我正在测试的项目上的Newtonsoft.Json参考要新。将所有nuget软件包更新到最新版本后,我就可以达到断点了

答案 10 :(得分:0)

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

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

测试名称

PublishAsync_Valid_Acked
PublishAsync_Valid_Nacked

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

例如:

[TestInitialize]
public void Setup()
{
    throw new Exception();
}

[TestMethod]
public void SomeFooTest()
{
    //The breakpoint will "Fail" to hit here.
}    

在Visual Studio中,您可以使用Test Explorer或CodeLens(仅限专业人士)轻松查看此行为:

enter image description here

答案 13 :(得分:0)

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