2013-05-01 4 views
0

Могу ли я использовать базовые классы Spring.NET (a la AbstractDependencyInjectionSpringContextTests) для загрузки контекста приложения и выполнения инъекции зависимостей с использованием MSTest?Интеграция Spring.NET с Specflow

Я пытаюсь разработать сценарии транзакций, которые в конечном итоге ударят по базе данных интеграции в реальном времени и откату. У меня есть набор базовых классов, которые простираются от Spring, которые выполняют немного инициализации, необходимой на нашей платформе приложений.

Я полагаю, что я могу абстрагироваться от этого и использовать крючки «До и после», но я хотел бы сохранить его как можно более похожим на то, что у нас уже есть, и продолжать использовать автоматическую инъекцию зависимостей.

ответ

0

Я бы предположил, что вы посмотрите, что ContextInjection-feature SpecFlow. Это простая, но довольно мощная функция, которая позволяет вам вводить объект прямо в класс определения шага.

Например, вы можете настроить свой транзакционный компонент так, как вы хотите, а затем просто вставить сконфигурированный объект прямо в свои шаги. Создайте «use-only-in-test» -версию этого, так сказать.

Для транзакций раньше я использовал крючки Before/AfterScenario, но это немного спрятано, как вы говорите. Тем не менее, он работает нормально.

Надеется, что это помогает

+0

ContextInjection требует классов с пустыми конструкторами, и я не думаю, что это хорошо подходит для инъекций зависимостей. До/После, я думаю, это лучший выбор, но я специально хотел использовать базовые классы Spring.NET для тестов. – pcw216

0

я смог расширить базовый класс Spring тестирования и подключить тест инициализации/очистков с Specflows до/после сценария. Мой класс шагов, по крайней мере, будет автоматически подключен с необходимыми зависимостями.

https://github.com/techtalk/SpecFlow/wiki/Hooks

[Binding] 
public class MySteps : AbstractDependencyInjectionSpringContextTests 
{ 

    protected override string[] ConfigLocations 
    { 
     get 
     { 
      return new string[] { 
       "assembly://My.Assembly/Path.To.Config/My.config" }; 
     } 
    } 

    public IMyService MyService { get; set; } 

    [Before] 
    public void BeforeTest() 
    { 

     this.TestInitialize(); 
    } 

    [After] 
    public void AfterTest() 
    { 
     this.TestCleanup(); 
    } 
} 
Смежные вопросы