2012-11-01 10 views
5

मैं Nunit साथ SpecFlow उपयोग कर रहा हूँ और मैं सेटअप करने के लिए मेरी वातावरण TestFixtureSetUpAttribute का उपयोग कर परीक्षण कोशिश कर रहा हूँ का सम्मान नहीं करते, लेकिन यह कभी नहीं कहा जाता है।Specflow TestFixtureSetUpAttribute

मैं पहले से ही MSTests और ClassInitialize विशेषता का उपयोग करने की कोशिश की, लेकिन एक ही होता है। समारोह नहीं कहा जाता है।

कोई भी विचार क्यों?

[Binding] 
public class UsersCRUDSteps 
{ 
    [NUnit.Framework.TestFixtureSetUpAttribute()] 
    public virtual void TestInitialize() 
    { 
     // THIS FUNCTION IS NEVER CALLER 

     ObjectFactory.Initialize(x => 
     { 
      x.For<IDateTimeService>().Use<DateTimeService>(); 
     }); 

     throw new Exception("BBB"); 
    } 

    private string username, password; 

    [Given(@"I have entered username ""(.*)"" and password ""(.*)""")] 
    public void GivenIHaveEnteredUsernameAndPassword(string username, string password) 
    { 
     this.username = username; 
     this.password = password; 
    } 

    [When(@"I press register")] 
    public void WhenIPressRegister() 
    { 
    } 

    [Then(@"the result should be default account created")] 
    public void ThenTheResultShouldBeDefaultAccountCreated() 
    { 
    } 

समाधान:

[Binding] 
public class UsersCRUDSteps 
{ 
    [BeforeFeature] 
    public static void TestInitialize() 
    { 
     // THIS FUNCTION IS NEVER CALLER 

     ObjectFactory.Initialize(x => 
     { 
      x.For<IDateTimeService>().Use<DateTimeService>(); 
     }); 

     throw new Exception("BBB"); 
    } 

    private string username, password; 

    [Given(@"I have entered username ""(.*)"" and password ""(.*)""")] 
    public void GivenIHaveEnteredUsernameAndPassword(string username, string password) 
    { 
     this.username = username; 
     this.password = password; 
    } 

    [When(@"I press register")] 
    public void WhenIPressRegister() 
    { 
    } 

    [Then(@"the result should be default account created")] 
    public void ThenTheResultShouldBeDefaultAccountCreated() 
    { 
    } 

उत्तर

6

आपका TestInitialize नहीं बुलाया जाता है क्योंकि यह एक यूनिट टेस्ट में अंदर अपने कदम वर्ग के अंदर है और नहीं (क्योंकि वास्तविक इकाई परीक्षण .cs जहाँ से उत्पन्न होता है अंदर है आपके .feature फ़ाइल)।

SpecFlow इन सभी पूर्वनिर्धारित हुक हैं, यह खुद परीक्षण जीवन की घटनाओं जो हुक कहा जाता है है है:

  • [BeforeTestRun]/[AfterTestRun]
  • [BeforeFeature]/[AfterFeature]
  • [BeforeScenario]/[AfterScenario]
  • [BeforeScenarioBlock]/[AfterScenarioBlock]
  • [BeforeStep]/[AfterStep]

ध्यान दें कि यह सेटअप में अधिक लचीलापन की अनुमति देता है। अतिरिक्त जानकारी के लिए see the documentation

तथ्य यह है कि आप उपयोग करना TestFixtureSetUp विशेषता आप शायद BeforeFeature हुक जो एक बार प्रत्येक सुविधा से पहले बुलाया जाएगा की आवश्यकता होगी चाहते हैं के आधार पर, ताकि आप लिखने की ज़रूरत:

[Binding] 
public class UsersCRUDSteps 
{ 
    [BeforeFeature] 
    public static void TestInitialize() 
    {    
     ObjectFactory.Initialize(x => 
     { 
      x.For<IDateTimeService>().Use<DateTimeService>(); 
     }); 

     throw new Exception("BBB"); 
    } 

    //... 
} 

ध्यान दें कि [BeforeFeature] विशेषता static विधि की आवश्यकता है।

आपको यह भी ध्यान रखना चाहिए कि यदि आप वीएस एकीकरण का उपयोग कर रहे हैं तो SpecFlow Hooks (event bindings) नामक एक प्रोजेक्ट आइटम प्रकार है जो शुरू करने में आपकी सहायता के लिए कुछ पूर्वनिर्धारित हुक के साथ बाध्यकारी वर्ग बनाता है।

+1

धन्यवाद, यह काम करते हैं। मुझे केवल अपने फ़ंक्शन को स्थिर में बदलने की आवश्यकता है – muek

संबंधित मुद्दे