2015-11-05 44 views
2

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

  1. 测试始终是成功的(即使输入和.gold文件 完全不同的,或空等);
  2. 没有.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。

回答

0

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

  1. 更新到ReSharper.SDK v10(这不是强制性的,我猜);
  2. 将基准测试等级从ContextActionTestBase更改为CSharpContextActionExecuteTestBase;
  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"); 
    } 
}