上下文操作的 ReSharper SDK 测试不起作用

Posted

技术标签:

【中文标题】上下文操作的 ReSharper SDK 测试不起作用【英文标题】:ReSharper SDK test for Context Action doesn't work 【发布时间】:2015-11-05 19:21:41 【问题描述】:

我尝试使用 ReSharper SDK 内置测试基础设施测试我的自定义 ReSharper 上下文操作。我创建了一个输入文件、一个输出文件 (.gold) 并运行测试。出现两个问题:

    测试总是成功的(即使输入和.gold文件是 完全不同,或空等); 没有.tmp 文件与输入和.gold 文件一起出现。

但是,如果我重命名输入文件,则测试运行会失败并出现“文件不存在”异常。

我的测试项目的结构与docs 中描述的相同。

TestEnvironment.cs:

[assembly: RequiresSTA]

[ZoneDefinition]
public class TestEnvironmentZone : ITestsZone, IRequire<PsiFeatureTestZone>



[SetUpFixture]
public class ReSharperTestEnvironmentAssembly : ExtensionTestEnvironmentAssembly<TestEnvironmentZone>


测试类:

[TestFixture]
public class FooContextActionTests : ContextActionTestBase<FooContextAction>

    protected override void ProcessAction(Func<FooContextAction> action, ITextControl control, ISolution solution)
    
    

    protected override string ExtraPath  get; 

    protected override string RelativeTestDataPath => @"FooContextActionTests";

    [Test]
    public void Test01()
    
        DoTestFiles("Test01.cs");
    

我为简单的快速修复做了类似的测试。该测试按预期工作,并对输入或.gold 文件的任何更改作出反应。所以问题是如何正确测试上下文动作。

使用了 ReSharper SDK 9.2。

【问题讨论】:

【参考方案1】:

我做到了!这些步骤可以解决问题:

    更新到 ReSharper.SDK v10(我猜这不是强制性的); 将基础测试类从 ContextActionTestBase 更改为 CSharpContextActionExecuteTestBase; 将ExtraPath属性值设置为等于RelativeTestDataPath值(该值是input和gold-file所在的文件夹名称)。 删除ProcessAction 覆盖。

这个测试类工作正常:

[TestFixture]
public class FooContextActionTests  : CSharpContextActionExecuteTestBase<FooContextAction>

    protected override string ExtraPath => "FooContextActionTests";

    protected override string RelativeTestDataPath => "FooContextActionTests";

    [Test]
    public void Test01()
    
        DoTestFiles("Test01.cs");
    

【讨论】:

以上是关于上下文操作的 ReSharper SDK 测试不起作用的主要内容,如果未能解决你的问题,请参考以下文章

扩展 ReSharper 的单元测试会话窗口

无法调试使用 SDK 制作的 ReSharper 插件

ReSharper 插件测试中的任意检查

Resharper SDK - 创建文件

如何使用 Resharper SDK 从 IClrDeclaredElement 获取 IDeclaredType

如何使用 ReSharper SDK 确定方法的返回类型?