.net Visual Studio“;“调试单元测试”;未能命中断点

.net Visual Studio“;“调试单元测试”;未能命中断点,.net,visual-studio,visual-studio-2008,debugging,.net,Visual Studio,Visual Studio 2008,Debugging,使用Visual Studio 2008并调试我的单元测试时。。。有时调试器工作正常。但是,在修改某些代码之后,单击“调试单元测试”VisualStudio通常无法命中代码中的断点。调试器基本上是挂起的,最终测试会使用新代码运行,但从不停止,让我看看发生了什么 我假设这与调试器执行的某种类型的程序集缓存有关,但不管我做什么(清理项目、删除bin文件夹、重新启动VS等),我都无法加载正确的程序集。还有人见过这种行为吗?有什么解决办法吗 顺便说一下,在Win XP上使用Resharper 4.5和.

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

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


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

如果您有
[HostType(“ASP.NET”)]
,请删除它,然后测试->调试->再次运行测试

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

我在VS2015中遇到了一个问题

我总是使用名为Debug的解决方案配置,但由于某些原因,我的解决方案被设置为生成发布版本


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

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


从“单元测试会话”窗口(Resharper-Windows-unittestsessions)启动调试时,断点不会被击中,该窗口来自Resharper

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

VS Enterprise 2017 V15.5.6,ReSharper 2017.2.2


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

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

System.Diagnostics.Debugger.Launch();

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


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

我的解决方案是:确保所有nuget包版本都匹配。我的单元测试项目使用的
Newtonsoft.Json
版本比我测试的项目上的
Newtonsoft.Json
参考更新。一旦我将所有nuget软件包更新到最新版本,我就能够点击断点

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

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

测试名称

PublishAsync_Valid_Acked
PublishAsync_Valid_Nacked

确保方法具有[TestMethod]属性,类具有[TestClass]属性。

如果您使用的安装方法具有
[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(仅在professional中)轻松看到此行为:


对于我来说,我去测试explore->setting->processor Architecture For AnyCPUProjects,并将其更改为X64,它对我起了作用。

右键单击+运行测试不会到达断点

右键单击+调试测试将

那天很晚了,但万一有人像我一样来到这里

我的测试不会遇到断点。我在测试中赤裸裸地(如下所示),但仍然没有击中目标:

    [Fact] // xunit, c#, vs 16.9.0
    public void TestX()
    {
        var messages = new List<int>();
        Assert.NotNull(messages);
    }
[Fact]//xunit,c#,vs 16.9.0
公共void TestX()
{
var messages=新列表();
Assert.NotNull(消息);
}
将同一测试复制到另一个项目,直接命中断点

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

在我最初的测试项目中,我引用了SUT项目,该项目从SUT复制了以下SDK包引用:

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

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


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

检查测试项目的引用程序集的位置!它直接引用代码更改的项目。我在VS2010中看到了相同的行为:(我在VS2010中也遇到过这种情况,但是在VS 2013中使用Resharper 10时,使用干净的解决方案似乎可以解决问题。这以前从来都不是问题,但在对我的机器进行重新映像后,我有一个解决方案可以始终做到这一点。我确信这与缓存的卷影副本有关。如果我对代码进行任何更改并设置任何新的断点,它们都不会出现。)我不能第一次被击中。我必须让它失败或杀死它,然后再做第二次。断点总是在第二次被击中。我想这一定是某种设置,因为它只发生在我的机器上,而且(我认为)只发生在这一个解决方案上。这为我在运行VS 2017 v15.5.6时修复了它。当你注意到这一点时,很明显。谢谢!)事实上,我上周又犯了同样的错误。我通常从不切换到发布版本,但一些旧的解决方案没有被构建服务器部署,所以我必须在本地以发布模式构建解决方案。然后我忘记了切换回。是的,这里也是。我通常也会将其保持在调试状态。我在谷歌上搜索Nunit、Resharp周围的所有内容呃和Nunit Tet Runner…没意识到问题是一个愚蠢的下拉框!再次感谢为我钉上它!哇。