c# - Visual Studio 2013 自定义测试适配器 : how to debug?

标签 c# visual-studio-extensions vs-unit-testing-framework

我正在编写自定义 Visual Studio Test Adapter ,并且想知道:我该如何调试它?现在我正在执行以下步骤:

  1. 将一些 logger.SendMessage() 日志行添加到我的适配器代码中。
  2. 构建适配器
  3. 将上述第 2 步中的 dll 复制到测试扩展文件夹 (Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions)
  4. 从控制台运行一些测试:vstest.console.exe dummy.project.with.tests.dll
  5. 查看日志输出

有什么方法可以在 VS2013 中调试我的测试适配器,因为它正在运行测试?

注意:我的研究在 this post 中发现了一条评论说要使用 Debugger.Launch() - 但我不知道如何激活它来实现我想要的。

最佳答案

第 1 步:安装适配器

在您提供的链接中,创建了一个 VSIX 项目来安装适配器。在 VSIX 项目中,有一个选项(在 VSIX 选项卡中)可以在生成时自动将适配器部署到 VS 实验配置单元。

如果您使用的是 vstest.console.exe,则无需执行此操作。

第 2 步:使用适配器运行测试

执行此操作并立即附加调试器的最简单方法是通过项目设置中的调试 选项卡。将此设置为启动外部程序,只要您在 Debug模式下运行它,调试器就会附加到该程序。

如果您通过 VS 运行测试:

devenv.exe /rootsuffix Exp

如果您通过 vstest.console.exe 运行测试并且您没有在您的主 VS 上安装适配器:

vstest.console.exe dummy.project.with.tests.dll /TestAdapterPath:"TestAdapterBuildDirectory"

如果您通过 vstest.console.exe 运行测试并且您确实在您的主 VS 上安装了适配器:

vstest.console.exe dummy.project.with.tests.dll /UseVsixExtentions:true

第 3 步:将调试器附加到您的适配器将从中运行的所有进程

在 Visual Studio 中使用调试 > 附加到进程选项。

在 VS2013 中,大多数进程会在测试运行之间徘徊,因此您可以运行一次测试来启动进程,然后在再次运行测试之前附加到它们。在 VS2015 中,这些进程根本不会长时间挂起,因此您必须非常快速地附加到它们,或者为您的测试执行程序添加大量 sleep ,以便为您提供额外的附加时间。

如果您附加到正确的进程,并且您的测试适配器是使用符号编译的,那么在适配器代码中需要的任何地方添加断点应该没有问题。

需要附加的进程如下

VS2013

  • devenv.exe - VS 实例。这是您创建的任何测试容器发现器将运行的地方。
  • vstest.discoveryengine.exe - 发现过程。这是任何测试发现者在被发送测试容器后将运行的地方。
  • vstest.executionengine.exe - 执行过程。这是任何测试执行器在发送测试用例后将运行的地方。因此,如果您想查看正在运行的测试,则需要附加此内容。

VS2015

其中一些进程仍然存在,但您还需要附加到一些进程,所有进程都称为 TE.ProcessHost.Managed.exe。如果您不确定要附加到这些进程中的哪一个,请全部附加到它们。一些将用于发现,一些将用于执行,尽管执行过程会很快消失。

vstest.console.exe

这不使用Test DiscovererTest Container Discoverer。如果您连接到实际的控制台程序,您应该能够通过向测试执行器 添加断点来检查正在运行的测试。如果这不起作用,我怀疑适配器根本没有运行,您应该更仔细地查看 /TestAdapterPath/UseVsixExtensions 选项。

关于c# - Visual Studio 2013 自定义测试适配器 : how to debug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24681402/

相关文章:

c# - 'Microsoft.ACE.OLEDB.12.0' 提供者未在本地机器上注册

c# - AngularJS 下拉列表在选择项目后丢失内容

c# - 如何在 visual studio 之外运行 SpecFlow 测试

c# - 获取项目的程序集名称

node.js - Node 工具减慢 Visual Studio

unit-testing - 单元测试 - 测试用例与多种方法

visual-studio - 代码覆盖率结果定期给出: Empty results generated

c# - 如何跟踪头部位置

c# - 如何通过ViewModel中的另一个属性来捕捉模型中属性的变化?

c# - 如何在 Visual Studio 启动时显示对话框。 - VS 扩展