ReSharper 插件测试中的任意检查

Posted

技术标签:

【中文标题】ReSharper 插件测试中的任意检查【英文标题】:Arbitrary checks in ReSharper plugin testing 【发布时间】:2015-03-14 12:13:07 【问题描述】:

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

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

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

    我编写代码来获取插件操作的结果并检查它们是否符合我的预期,以便在需要时使测试失败

我怎样才能做到这一点?

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

【问题讨论】:

【参考方案1】:

是的,您可以这样做。您需要创建自己的测试基类,而不是使用提供的基类之一。

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

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

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

【讨论】:

以上是关于ReSharper 插件测试中的任意检查的主要内容,如果未能解决你的问题,请参考以下文章

Resharper 自定义插件严重性选项

VS2010 中的 ReSharper 8.0 调试插件第一次工作,然后错误后续尝试

Resharper 运行配置

获取当前项目中的所有 IDeclaredType-s(对于 ReSharper Generator 插件)

使用 ReSharper,如何在长时间运行的单元测试期间显示调试输出?

VS停用ReSharper