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

ReSharper SDK test for Context Action doesn't work

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

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

但是,如果我重命名输入文件,则测试 运行 失败并出现 "file does not exist" 异常。

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

TestEnvironment.cs:

[assembly: RequiresSTA]

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

[SetUpFixture]
public class ReSharperTestEnvironmentAssembly : ExtensionTestEnvironmentAssembly<TestEnvironmentZone>
{
}

测试class:

[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(我猜这不是强制性的);
  2. 将基础测试 class 从 ContextActionTestBase 更改为 CSharpContextActionExecuteTestBase
  3. 设置 ExtraPath 属性 值等于 RelativeTestDataPath 值(此值是 input 和 gold-file 所在的文件夹名称)。
  4. 删除 ProcessAction 覆盖。

此测试 class 工作正常:

[TestFixture]
public class FooContextActionTests  : CSharpContextActionExecuteTestBase<FooContextAction>
{
    protected override string ExtraPath => "FooContextActionTests";

    protected override string RelativeTestDataPath => "FooContextActionTests";

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