使用Visual Studio 2008并调试我的单元测试时......有时调试器工作正常。但是,在修改某些代码之后,经常单击“调试单元测试”Visual Studio将无法访问代码中的断点。调试器基本上都会挂起,最终测试会以新代码运行,但永远不会让我看到发生了什么。
我认为这与调试器完成的某种类型的汇编缓存有关,但不管我做什么(清理项目,删除bin文件夹,重启VS等)我永远无法得到正确的程序集加载。有没有人见过这种行为?任何解决方案?
顺便说一下,在Win XP上使用Resharper 4.5和.NET 3.5。
答案 0 :(得分:43)
我在VS2015遇到断点时遇到了问题。
我一直在使用名为Debug的解决方案配置,但出于某种原因,我的解决方案已设置为构建Release版本。
在Visual Studio顶部的下拉列表中从Release切换到Debug修复了我的问题。
答案 1 :(得分:2)
现在我们在Visual Studio 2017 15.5和Resharper 2017.2中遇到了这个问题。 由Resharper引起的问题并在最新版本2017.3 +
中解决答案 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(仅限专业人士)轻松查看此行为:
答案 13 :(得分:0)