Visual Studio 和基于 Nuget 的测试 Runners/Adapters

Visual Studio and Nuget based Test Runners/Adapters

最近我开始了解基于 nuget 的 adapter/runner (http://xunit.github.io/docs/running-tests-in-vs.html)

我试图了解这些 runners/adapters 如何被 Visual Studio 识别,然后被测试 Window 使用。

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

我想了解 VS 如何使用安装在包文件夹中的包挂钩测试发现?

Where/how VS 和基于 nuget 的适配器会上瘾吗?

我试图找到这些信息,但我的 google 失败了。 :(

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

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

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

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