问题描述
最近,我开始了解基于nuget的适配器/运行器( http://xunit.github.io/docs/running-tests-in-vs.html )
Recently I came to know about the nuget based adapter/runner (http://xunit.github.io/docs/running-tests-in-vs.html)
我试图了解Visual Studio如何识别这些运行程序/适配器,然后再由TestWindow使用它们.
I was trying to understand how these runners/adapters are recognized by Visual Studio and then used by the TestWindow.
例如,如果我安装"xunit.runner.visualstudio" nuget程序包,则会发现我项目中所有基于xUnit的测试并在测试"窗口中显示.
For example, if I install "xunit.runner.visualstudio" nuget package all the xUnit based tests in my project are discovered and displayed in the Test Window.
我正在尝试了解VS如何使用安装在程序包文件夹中的程序包钩住测试发现"?
I am trying to understand how does VS hook the Test Discovery using the package installed in packages folder?
基于VS和nuget的适配器在哪里/如何被钩住?
Where/how do VS and nuget based adapter get hooked?
我尝试查找此信息,但我的Google Fu使我失败了. :(
I tried finding this information but my google fu failed me. :(
我检查了问题的答案(已安装自定义测试适配器通过NuGet并没有发现测试),它确实说VS将程序包复制到了路径%TEMP%\ VisualStudioTestExplorerExtensions,但这已经足够了.
I checked answer for the question (Custom test adapter installed via NuGet isn't discovering tests) and it does say that VS copies the packages to the path %TEMP%\VisualStudioTestExplorerExtensions but that's pretty much it.
推荐答案
由于这涉及VS内部的许多工作方式,因此我认为您不会得到完全确定的答案.但是,为了解决与您链接的问题,我查看了一堆反汇编的代码,因此我有一个很好的主意.看起来是这样的:
Since this involves a lot of how VS works internally, I don't think you'll get a totally definitive answer. However, to solve the issue you linked to I looked at a bunch of disassembled code, so I have a pretty good idea. Here's how it seems to work:
- 您构建一个引用名为Sample.TestAdapter的程序包的项目
- VS将Sample.TestAdapter目录从软件包复制到%TEMP%\ VisualStudioTestExplorerExtensions
- 某些事情会触发测试发现-重建总是如此,有时增量构建也是如此. vstest.console.exe在此处可用于调试.
- VS启动vstest.discovery.exe,该文件在VisualStudioTestExplorerExtensions中查找实现ITestDiscoverer的程序集
- 如果找到了ITestDiscoverer,则VS会使用可能包含测试的程序集列表对其进行调用
- 发现的测试由您的测试适配器发送回VS
据我所知,这是一个非常简单的基于反射的插件体系结构.希望有帮助.
So, as far as I can tell it's a pretty simple reflection based plug-in architecture. Hope that helps.
这篇关于基于Visual Studio和Nuget的测试运行器/适配器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!