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

时间:2015-11-05 19:21:41

标签: c# .net resharper resharper-9.0 resharper-sdk

我尝试使用ReSharper SDK内置测试基础架构测试我的自定义ReSharper Context Action。我已经创建了一个输入文件,一个输出文件(.gold)并运行测试。出现两个问题:

  1. 测试始终成功(即使输入和.gold文件也是如此 完全不同,或空虚等);
  2. 没有.tmp文件以及输入和.gold文件。
  3. 但是,如果我重命名输入文件,那么测试运行将失败,并且“文件不存在”异常。

    我的测试项目的结构与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文件的任何更改做出反应。所以问题是如何正确测试Context Action。

    使用ReSharper SDK 9.2。

1 个答案:

答案 0 :(得分:0)

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

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

    [TestFixture]
    public class FooContextActionTests  : CSharpContextActionExecuteTestBase<FooContextAction>
    {
        protected override string ExtraPath => "FooContextActionTests";
    
        protected override string RelativeTestDataPath => "FooContextActionTests";
    
        [Test]
        public void Test01()
        {
            DoTestFiles("Test01.cs");
        }
    }