Visual Studio 2013自定义测试适配器:如何调试?

Vis*_*loi 7 c# vs-unit-testing-framework visual-studio-extensions

我正在编写一个自定义Visual Studio 测试适配器,并想知道:我该如何调试它?现在我正在遵循以下步骤:

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

有没有办法在VS2013中调试我的测试适配器,因为它正在运行测试?

注意:我的研究在这篇文章中发现了一条评论,说使用Debugger.Launch() - 但我不知道如何激活它以实现我想要的.

And*_*ger 5

第1步:安装适配器

在您提供的链接中,创建了一个VSIX项目来安装适配器.在VSIX项目中,有一个选项(在VSIX选项卡中)将适配器自动部署到构建的VS Experimental hive.

如果您正在使用vstest.console.exe,则无需执行此操作.

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

最简单的方法是立即连接调试器,方法是通过项目设置中的Debug选项卡.将其设置为启动外部程序,只要在调试模式下运行调试器,调试器就会附加到程序中.

如果您通过VS运行测试:

devenv.exe /rootsuffix Exp
Run Code Online (Sandbox Code Playgroud)

如果您正在运行测试,vstest.console.exe并且在主VS上安装适配器:

vstest.console.exe dummy.project.with.tests.dll /TestAdapterPath:"TestAdapterBuildDirectory"
Run Code Online (Sandbox Code Playgroud)

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

vstest.console.exe dummy.project.with.tests.dll /UseVsixExtentions:true
Run Code Online (Sandbox Code Playgroud)

步骤3:将调试器附加到将运行适配器的所有进程

使用Visual Studio中的" 调试">"附加到进程"选项.

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

如果您已连接到正确的进程,并且您的测试适配器是使用符号编译的,那么在适配器代码中的任何位置添加断点都应该没有问题.

您需要附加的过程如下

VS2013

  • devenv.exe - VS实例.这是您运行的任何测试容器发现者的位置.
  • vstest.discoveryengine.exe - 发现过程.这是任何测试发现者在发送测试容器后运行的地方.
  • vstest.executionengine.exe - 执行过程.在发送测试用例之后,这将是运行任何Test Executors的地方.因此,如果您希望看到测试正在运行,那么这就是您需要附加的内容.

VS2015

其中一些过程仍然存在,但您还需要附加到许多进程,所有进程都被调用TE.ProcessHost.Managed.exe.如果您不确定要附加哪些进程,请附加所有进程.有些将用于发现,有些将用于执行,但执行过程将很快消失.

vstest.console.exe

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