Visual Studio和基于Nuget的测试运行器/适配器

时间:2015-04-01 20:17:47

标签: visual-studio nuget visual-studio-test-runner

最近我开始了解基于nuget的适配器/转轮(http://xunit.github.io/docs/running-tests-in-vs.html

我试图了解Visual Studio如何识别这些运行程序/适配器,然后由TestWindow使用。

例如,如果我安装“xunit.runner.visualstudio”nuget包,我的项目中的所有基于xUnit的测试都会被发现并显示在测试窗口中。

我试图了解VS如何使用packages文件夹中安装的软件包挂钩Test Discovery?

基于VS和nuget的适配器在何处/如何被挂钩?

我试着找到这些信息,但我的谷歌fu失败了我。 :(

我检查了问题的答案(Custom test adapter installed via NuGet isn't discovering tests),它确实说VS将软件包复制到路径%TEMP%\ VisualStudioTestExplorerExtensions,但这就是它。

1 个答案:

答案 0 :(得分:5)

由于这涉及很多VS如何在内部工作,我认为你不会得到一个完全确定的答案。但是,为了解决你链接的问题,我看了一堆反汇编的代码,所以我有一个很好的主意。以下是它的工作原理:

  1. 您构建了一个引用名为Sample.TestAdapter
  2. 的包的项目
  3. VS将Package.TestAdapter目录从包复制到%TEMP%\ VisualStudioTestExplorerExtensions
  4. 某些东西会触发测试发现 - 重建始终会发生,有时增量构建也会发生。 vstest.console.exe在这里用于调试。
  5. VS启动vstest.discovery.exe,在VisualStudioTestExplorerExtensions中查找实现ITestDiscoverer的程序集
  6. 如果找到ITestDiscoverer,VS会使用可能包含测试的程序集列表调用它
  7. 发现的测试由测试适配器
  8. 发送回VS.

    所以,据我所知,这是一个非常简单的基于反射的插件架构。希望有所帮助。