ReSharper 插件测试中的任意检查

Arbitrary checks in ReSharper plugin testing

正如我从 DevGuide 中了解到的,测试 ReSharper 插件的工作方式如下:

  1. 插件已加载并将测试输入文件传递给它
  2. 插件对传递的文件执行操作
  3. ReSharper 的测试环境以特殊格式将插件操作结果写入 .tmp 文件,该格式取决于测试的功能类型(例如,如果我们测试完成,.tmp 文件将包含生成的完成项列表)
  4. ReSharper 的测试环境通过比较 .tmp 文件和 .gold 文件来决定测试是失败还是成功

但我需要以下场景。前两步同上,则:

  1. 我编写代码来获取插件操作的结果并检查它们是否符合我的预期,因此如果需要我可以让测试失败

我怎样才能做到这一点?

我需要它,因为我有一段代码使用 ReSharper 生成的 AST 来构建一些图表,我想测试构建的图表是否正确。

是的,你可以做到。您需要创建自己的测试库 class,而不是使用提供的测试库之一。

有一个基本 classes 的层次结构,每个都添加了额外的功能。通常,您将从 QuickFixAvailabilityTestBaseQuickFixTestBase 之类的内容中派生,它们添加了用于测试快速修复的功能。这些 classes 将执行某些操作并将输出写入 .tmp 文件,然后将其与 .gold 文件进行比较。

这些 classes 本身派生自类似 BaseTestWithSingleProject 的东西,它提供了设置内存中解决方案和项目的功能,该解决方案和项目填充了您在测试中指定的文件,或者 BaseTestWithTextControl 这也为您提供了您正在测试的文件的文本控件。如果您直接从这个 class 派生(或使用您自己的自定义基础 class),您可以执行实际测试所需的操作,并在内存中断言某些内容,或将适当的文本写入.tmp 文件与 .gold.

进行比较

您应该覆盖 DoTest 方法。这会给你一个已经设置好的 IProject,你可以做任何你需要做的事情来测试你的扩展的功能。您可以使用 project.Solution.GetComponent<> 获取任何 shell 或解决方案组件,并使用 ExecuteWithGold 方法执行某些操作,写入 .tmp 文件并让 ReSharper 与 .gold 给你归档。