इस .फ़ीचर फ़ाइल का निर्माण परीक्षण के लिए पीछे एक कोड पैदा करेगा के साथ सामना कर सकते हैं। फिर आपको प्रत्येक चरण को एक विधि में तार करने की आवश्यकता है। ऐसा करने का सबसे आसान तरीका है,
1: परीक्षण डीबग करें, परीक्षण असुविधाजनक के रूप में विफल हो जाएगा। टेस्ट रन परिणाम देखकर specflow आपको इस परीक्षण के लिए टेम्पलेट जोड़कर मदद करता है। त्रुटि संदेश इस तरह की कुछ दिखाई देगा
Assert.Inconclusive विफल। एक या अधिक चरणों के लिए कोई मिलान चरण परिभाषा नहीं मिली।
[Binding]
public class StepDefinition1
{
[Given(@"a user signs up for a 30 day account")]
public void GivenAUserSignsUpForA30DayAccount()
{
}
[When(@"they login in 29 days")]
public void WhenTheyLoginIn29Days()
{
ScenarioContext.Current.Pending();
}
[Then(@"they will be let in")]
public void ThenTheyWillBeLetIn()
{
ScenarioContext.Current.Pending();
}
}
2: एक नया specflow कदम परिभाषा फ़ाइल, जो मूल रूप से सिर्फ इकाई परीक्षण वर्ग specflow विशेषताओं के साथ आबादी है में इस कॉपी करें। अब कुछ युक्तियां हैं जो आप मदद करने के लिए कर सकते हैं। GivenAUserSignsUpForA30DayAccount विधि में मैं एक उपयोगकर्ता बनाउंगा जिसका परीक्षण उस परीक्षण में किया जाएगा जिसमें 30 दिन का परीक्षण खाता है। एक निजी सदस्य यहां ठीक काम करेगा ताकि आप उन्हें विधियों के बीच एक्सेस कर सकें, लेकिन यह केवल तभी काम करता है जब सभी विधियां एक ही कक्षा में हों। यदि आप कई विशेषताओं/कक्षाओं के बीच विधियों का पुन: उपयोग करने का प्रयास करते हैं तो आपको अपनी ऑब्जेक्ट को परिदृश्यकोन्टेक्स्ट
3 में सहेजने की आवश्यकता होगी: जब specflow परीक्षण चलता है तो यह एक विधि की तलाश करता है जिसमें एक ही स्ट्रिंग के साथ मिलान विशेषता होती है। यहां एक चाल यह है कि आप विधि विशेषता में जंगली कार्ड का उपयोग करके विधि में पैरामीटर पास कर सकते हैं। 2 अलग-अलग फ़ाइल कार्ड
(। *) का अर्थ है कि आप उस विधि (\ d +) के लिए एक स्ट्रिंग पास कर रहे हैं जिसका अर्थ है कि आप उस विधि के लिए एक int पास कर रहे हैं।
क्योंकि आपकी जब विधि सामान्य है तो आप इसे इस तरह के पैरामीटर के साथ पुन: उपयोग कर सकते हैं।
[When(@"they login in (\d+) days")]
public void WhenTheyLoginInDays(int daysRemaining)
{
Account.DaysRemaining = daysRemaining;
}
4: आखिरकार अपनी आवेषण को फिर विधि में जोड़ें ताकि अंत परिणाम ऐसा कुछ दिख सके। (ध्यान दें कि व्यक्तिगत रूप से मैं सुविधा एक सा के शब्दों पुनर्गठन और इसे पारित करेंगे अपेक्षित परिणाम इस तरह से परीक्षण तर्क मेरी उदाहरण के रूप में के रूप में बुरा नहीं है, परिदृश्य डेटा संचालित परीक्षण के लिए रूपरेखा पर देखने के)
[Binding]
public class StepDefinition1
{
UserAccount user;
[Given(@"a user signs up for a 30 day account")]
public void GivenAUserSignsUpForA30DayAccount()
{
user = AccountController.CreateNewUser("bob", "password", AccountType.Trial);
}
[When(@"they login in (\d+) days")]
public void WhenTheyLoginInDays(int daysRemaining)
{
Account.DaysRemaining = daysRemaining;
}
[Then(@"they will (.*)")]
public void ThenTheyWillBeLetIn(string expected)
{
//check to see which test we are doing and then assert to see the expected result.
if(string.Compare(expected, "be let in", true)
Assert.AreEqual(LoginResult.Passed, LoginService.Login);
if(string.Compare(expected, "be asked to renew", true)
Assert.AreEqual(LoginResult.Passed, LoginService.Login);
}
}
मुझे लगता है कि इस प्रश्न से पूछने के कुछ समय बाद StepArgumentTransformation को स्पेकफ़्लो में जोड़ा गया था .... –
आह, सच। यह अभी भी एक [संबंधित प्रश्न] (http://stackoverflow.com/questions/40553847/specflow-step-argument-transformation-on-table-cell-contents-with-createinstance) की खोज में आया है, इसलिए दूसरों के लिए ' खातिर... –