Visual Studio - 突然不能调试测试

72

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

如果我从测试资源管理器中选择一个测试并告诉它运行,它只会在“测试输出”窗口中输出以下内容:

> ------ 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

我肯定没有做过那件事。

它在列表中的每个测试上都这样做。

然而,我可以毫不费力地运行测试,并且它们通过了...但我无法调试测试。

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


以管理员身份运行没有用,重启也没有用...但是不知怎么回事,重启并以管理员身份运行就可以了...我没有改变任何其他的东西!哎...好吧,如果一直正常工作,我会将其发布为答案 :/ - SelAromDotNet
33个回答

64

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

我正在使用VS 2015专业版。


6
如果可以的话,我现在会抱抱你。这个问题困扰了我好几个小时呢,哈哈。 - Jason Evans
我感觉很愚蠢,突然间... - SeyoS

27

将测试项目从VS 2010升级到VS 2012 Ultimate Update 3后,我使用MSTest命令进行“调试选定的测试”后,在“测试输出”窗口中得到相同的输出结果。

我尝试使用Resharper 8“单元测试会话”窗口来调试测试。结果窗口中显示的消息是“未运行测试”。

帮助我的解决方案是根据此链接的说明修改测试项目设置以启用本机代码调试:通过反射调用抛出未捕获的异常

如果链接无法打开:

  1. 右键单击项目并选择“属性”。
  2. 在左侧选择“调试”选项卡。
  3. 转到底部的“启用调试器”
  4. 选中“启用本机代码调试”复选框(或“启用非托管代码调试”,取决于版本)

感谢GalDude33发布了这个解决方案。


已经应用了您提到的设置,但还没有生效。 - Anil Purswani
1
或者确保你的VS没有设置为发布模式。我刚犯了这个错误。你必须在调试模式下才能调试测试。 - dyslexicanaboko

24

在我的情况下,是由于launchSettings.json文件导致调试器无法命中断点。不确定为什么这个文件会存在于单元测试类型的项目中(可能是一些不需要的剩余文件),但是 xunit 似乎没有忽略它。我只需删除该文件,就可以再次对单元测试进行调试。

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


1
谢谢你,KING! - JohannSig
B I N G O!!!! - juagicre

18

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

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

在我的情况下,不需要关闭并重新打开VS。


4
即使是"IT人群"也能修复这个问题!它对我有用。 - Blue Clouds
2
在我的VS 2017中工作正常。对我来说导致问题的是停止调试;我必须让调试会话运行到完成,否则它会破坏“调试测试”命令。 - System.Cats.Lol

15

异步测试 - 我的情况类似,我的测试没有执行且我的断点没有被命中。在 Visual Studio 的测试资源管理器中可以看到测试,但我无法调试它。尝试运行测试时,就好像找不到它一样,而实际上它确实在测试资源管理器中。

如果有人有同样的问题,我的解决方法就是将测试方法的签名从 "async void" 改为 "async Task"。

这样做:

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

不是这个:

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

1
这是我的VS2019案例,它完美地工作了。 - Rabel Obispo

7

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

单元测试调试修复


下投票的原因是什么?如果您引用不存在的测试设置,则会导致调试单元测试时出现问题。更多信息请参见:https://msdn.microsoft.com/zh-cn/library/ee256991.aspx?f=255&MSPPError=-2147217396 - Matthew Peterson
似乎有很多与此症状相关的问题和解决方案,但这个解决方法对我很有帮助。在VS2017中禁用runsettings文件即可解决问题。谢谢! - Eike

6

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

步骤。

1.关闭Visual Studio实例。

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

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

4.重新启动应用程序。


关闭所有的Visual Studio,清除临时文件并删除bin和obj文件夹对我很有效,谢谢。 - Ali Yousefi
我不确定第二步该怎么做,所以跳过了它,直接进行了第三和第四步,问题得到了解决。谢谢@Om Sao... - Tien
和 @swathi cv!! - Tien

5

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

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

如果您正在使用部署工具而不进行CI/CD测试,则可能需要取消选中单元测试项目以进行CI/CD。当您添加新的测试时,您必须重新选中它以进行单元测试 - 最好在添加新测试时有一个警告 - 但是您必须手动检查它是否在调试构建中被选中。 - Mark W. Mitchell

5

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


谢谢!在我苦苦纠结了几个小时后,这对我很有用。 - susieloo_

3
在我的情况下,我的符号没有被加载。
我不得不进入“工具”-->“选项”-->“调试”-->“符号”,并选择“加载所有模块,除非被排除”,才能使断点生效。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接