2015-11-05 7 views
2

Я пытаюсь проверить свое настраиваемое контекстное действие ReSharper с использованием встроенной тестовой инфраструктуры ReSharper SDK. Я создал входной файл, выходной файл (.gold) и запустил тест. Две проблемы возникают:ReSharper SDK test for Context Действие не работает

  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"); 
    } 
}