2014-10-07 64 views
1

我正在嘗試做一些初始設置,它爲特定功能下的場景設置環境。我在一個單獨的課堂中分享了設置數據。我添加了一個specflow鉤子文件,並將其修改爲與之前的功能鉤子一樣。然後我嘗試使用上下文注入。在我爲BeforeScenario鉤子文件創建了一個安裝類的私有變量和一個構造函數(以設置類的對象)。上下文注入和BeforeFeature鉤子

我正面臨的問題是,BeforeFeature方法必須按照specflow進行靜態化。如果我讓我的私人安裝類是靜態的,那麼構造函數不會被調用。

我正在做的對嗎?或者我試圖做什麼甚至是可能的?

[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]設置它的值,那麼你應該在每一個相同的實例情景所以任何修改,提出應該堅持(假設這是你想要的,否則只是在BeforeScenario方法創建一個新的SetUp

只要你的步驟類現在在構造函數中要求一個SetUp例如他們應該得到的一個你放在容器裏。