最近我了解了基于nuget的适配器/运行程序(http://xunit.github.io/docs/running-tests-in-vs.html)
我试图了解这些运行程序/适配器是如何被VisualStudio识别的,然后被TestWindow使用的。
例如,如果我安装"xunit.runner.visionstudio"nuget包,我的项目中所有基于xunit的测试都会被发现并显示在测试窗口中。
我正在尝试了解VS是如何使用安装在packages文件夹中的软件包挂接测试发现的?
VS和基于nuget的适配器在哪里/如何被钩住?
我试着找到这些信息,但我的谷歌搜索失败了
我检查了这个问题的答案(通过NuGet安装的自定义测试适配器并没有发现测试),它确实说VS将包复制到路径%TEMP%\VisualStudioTestExplorerExtensions,但仅此而已。
由于这涉及到VS内部的许多工作方式,我认为您不会得到完全确定的答案。然而,为了解决你链接到的问题,我看了一堆反汇编的代码,所以我有一个很好的主意。以下是它的工作原理:
- 您生成了一个引用名为Sample.TestAdapter的包的项目
- VS将Sample.TestAdapter目录从包复制到%TEMP%\VisualStudioTestExplorerExtensions
- 某些东西触发了测试发现——重建总是会发生,有时增量构建也会发生。vstest.console.exe在这里对调试很有用
- VS启动vstest.discovery.exe,它在VisualStudioTestExplorerExtensions中查找实现ITestDiscoverer的程序集
- 如果找到ITestDiscoverer,VS将使用可能包含测试的程序集列表来调用它
- 发现的测试将由测试适配器发送回VS
所以,据我所知,这是一个非常简单的基于反射的插件体系结构。希望能有所帮助。