3

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

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

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

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

VS 和基于 nuget 的适配器在哪里/如何上钩?

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

我检查了问题的答案(通过 NuGet 安装的自定义测试适配器没有发现测试),它确实说 VS 将包复制到路径 %TEMP%\VisualStudioTestExplorerExtensions ,但仅此而已。

4

1 回答 1

5

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

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

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

于 2015-04-01T20:43:10.080 回答