2

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

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

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

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

测试环境.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。

4

1 回答 1

0

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

  1. 更新到 ReSharper.SDK v10(我猜这不是强制性的);
  2. 将基础测试类从 更改ContextActionTestBaseCSharpContextActionExecuteTestBase;
  3. ExtraPath属性值设置为等于RelativeTestDataPath值(该值是输入和黄金文件所在的文件夹名称)。
  4. 删除ProcessAction覆盖。

这个测试类工作正常:

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

    protected override string RelativeTestDataPath => "FooContextActionTests";

    [Test]
    public void Test01()
    {
        DoTestFiles("Test01.cs");
    }
}
于 2015-11-15T20:20:24.430 回答