ReSharper 插件测试中的任意检查
Arbitrary checks in ReSharper plugin testing
正如我从 DevGuide 中了解到的,测试 ReSharper 插件的工作方式如下:
- 插件已加载并将测试输入文件传递给它
- 插件对传递的文件执行操作
- ReSharper 的测试环境以特殊格式将插件操作结果写入 .tmp 文件,该格式取决于测试的功能类型(例如,如果我们测试完成,.tmp 文件将包含生成的完成项列表)
- ReSharper 的测试环境通过比较 .tmp 文件和 .gold 文件来决定测试是失败还是成功
但我需要以下场景。前两步同上,则:
- 我编写代码来获取插件操作的结果并检查它们是否符合我的预期,因此如果需要我可以让测试失败
我怎样才能做到这一点?
我需要它,因为我有一段代码使用 ReSharper 生成的 AST 来构建一些图表,我想测试构建的图表是否正确。
是的,你可以做到。您需要创建自己的测试库 class,而不是使用提供的测试库之一。
有一个基本 classes 的层次结构,每个都添加了额外的功能。通常,您将从 QuickFixAvailabilityTestBase
或 QuickFixTestBase
之类的内容中派生,它们添加了用于测试快速修复的功能。这些 classes 将执行某些操作并将输出写入 .tmp
文件,然后将其与 .gold
文件进行比较。
这些 classes 本身派生自类似 BaseTestWithSingleProject
的东西,它提供了设置内存中解决方案和项目的功能,该解决方案和项目填充了您在测试中指定的文件,或者 BaseTestWithTextControl
这也为您提供了您正在测试的文件的文本控件。如果您直接从这个 class 派生(或使用您自己的自定义基础 class),您可以执行实际测试所需的操作,并在内存中断言某些内容,或将适当的文本写入.tmp
文件与 .gold
.
进行比较
您应该覆盖 DoTest
方法。这会给你一个已经设置好的 IProject
,你可以做任何你需要做的事情来测试你的扩展的功能。您可以使用 project.Solution.GetComponent<>
获取任何 shell 或解决方案组件,并使用 ExecuteWithGold
方法执行某些操作,写入 .tmp
文件并让 ReSharper 与 .gold
给你归档。
正如我从 DevGuide 中了解到的,测试 ReSharper 插件的工作方式如下:
- 插件已加载并将测试输入文件传递给它
- 插件对传递的文件执行操作
- ReSharper 的测试环境以特殊格式将插件操作结果写入 .tmp 文件,该格式取决于测试的功能类型(例如,如果我们测试完成,.tmp 文件将包含生成的完成项列表)
- ReSharper 的测试环境通过比较 .tmp 文件和 .gold 文件来决定测试是失败还是成功
但我需要以下场景。前两步同上,则:
- 我编写代码来获取插件操作的结果并检查它们是否符合我的预期,因此如果需要我可以让测试失败
我怎样才能做到这一点?
我需要它,因为我有一段代码使用 ReSharper 生成的 AST 来构建一些图表,我想测试构建的图表是否正确。
是的,你可以做到。您需要创建自己的测试库 class,而不是使用提供的测试库之一。
有一个基本 classes 的层次结构,每个都添加了额外的功能。通常,您将从 QuickFixAvailabilityTestBase
或 QuickFixTestBase
之类的内容中派生,它们添加了用于测试快速修复的功能。这些 classes 将执行某些操作并将输出写入 .tmp
文件,然后将其与 .gold
文件进行比较。
这些 classes 本身派生自类似 BaseTestWithSingleProject
的东西,它提供了设置内存中解决方案和项目的功能,该解决方案和项目填充了您在测试中指定的文件,或者 BaseTestWithTextControl
这也为您提供了您正在测试的文件的文本控件。如果您直接从这个 class 派生(或使用您自己的自定义基础 class),您可以执行实际测试所需的操作,并在内存中断言某些内容,或将适当的文本写入.tmp
文件与 .gold
.
您应该覆盖 DoTest
方法。这会给你一个已经设置好的 IProject
,你可以做任何你需要做的事情来测试你的扩展的功能。您可以使用 project.Solution.GetComponent<>
获取任何 shell 或解决方案组件,并使用 ExecuteWithGold
方法执行某些操作,写入 .tmp
文件并让 ReSharper 与 .gold
给你归档。