2014-10-07 2 views
1

Я пытаюсь выполнить некоторую интуитивную настройку, которая настраивает среду для сценариев под конкретную функцию. Я собрал данные настройки в отдельный класс. Я добавил файл привязки к потоку и изменил его, чтобы выполнить функцию hook. Затем я попытался использовать Context Injection. В я создал приватную переменную класса установки и конструктор (взяв объект класса установки) для файла hook BeforeScenario.Контекст Injection and BeforeFeature

Проблема, с которой я сталкиваюсь, заключается в том, что метод BeforeFeature имеет статичность в зависимости от потока. И если я сделаю свой приватный класс установки статическим, то конструктор не будет вызван.

Это то, что я делаю правильно? Или возможно даже то, что я пытаюсь сделать?

[Binding] 
public class BeforeFeature 
{ 
    private static SetUp setUp; 

    public BeforeFeature(SetUp setUpObject) 
    { 
     setUp = setUpObject; 
    } 

    [BeforeFeature] 
    public static void RunBeforeFeature() 
    { 
     //Some processing. 
     setUp.baseDir = "some data"; 
     setUp.status = "some data" 
    } 
} 

ответ

3

Вы можете сказать SpecFlows рамки инъекции контекста, что у вас есть объект, который следует использовать, когда класс Шаг запрашивает экземпляр в конструктор. Это может быть сделано, как показано на the example:

[Binding] 
public class BeforeFeature 
{ 
    private readonly IObjectContainer objectContainer; 
    private static SetUp setUp; 

    public BeforeFeature(IObjectContainer container) 
    { 
     this.objectContainer = objectContainer; 
    } 

    [BeforeFeature] 
    public static void RunBeforeFeature() 
    { 
     //Some processing. 
     setUp.baseDir = "some data"; 
     setUp.status = "some data" 
    } 

    [BeforeScenario] 
    public void RunBeforeScenario() 
    {    
     objectContainer.RegisterInstanceAs<SetUp>(setUp); 
    } 
} 

Вы делаете установку перед сценарием а не особенность, но если вы только создать SetUp один раз и установите его значение в [BeforeFeature] то вы должны получить тот же экземпляр в каждом сценарий таким образом, любые изменения, внесенные должны придерживаться (при условии, что это то, что вы хотите, в противном случае просто создать новый SetUp в методе BeforeScenario)

пока ваши классы Шаг Теперь попросите SetUp например, в конструкторе они должны получить который вы разместили в контейнере.

Смежные вопросы