2012-11-21 11 views
6

यह क्या मैं करना चाहता हूँ है:विजुअल स्टूडियो सी # यूनिट परीक्षण - विभिन्न/एकाधिक परीक्षण प्रारंभिकरणों के साथ यूनिट परीक्षण चलाएं, एक ही यूनिट परीक्षण को कई बार चलाएं?

  1. यूनिट टेस्ट का एक समूह बनाएं।
  2. विभिन्न प्रकार के म्यूटेशन, इनपुट चर इत्यादि के प्रारंभिक क्रम/संयोजनों का निर्माण करें
  3. प्रत्येक पैरामीटर के आधार पर इस तरह के प्रारंभिकरण के एक सेट के विरुद्ध प्रत्येक दिए गए यूनिट परीक्षण को चलाएं।

मैं ऐसा कुछ करने के बारे में कैसे जाऊं?

क्या इसे पहले से संभालने के लिए कोई ढांचा है (यानी प्रारंभिक परिवर्तन करते समय एक बार दिया गया परीक्षण चलाएं)? क्या आप किसी भी डिजाइन या विचारों का सुझाव दे सकते हैं जिसके साथ मैं ऐसा करने के लिए कुछ कर सकता हूं?

मुझे यूनिट परीक्षण फ्रेम कार्यों के बारे में पता है। मैं अपने आप न्यूटिट और राइनो मैक्स का उपयोग करता हूं।

नीचे दिखाया गया है मैं क्या जरूरत का एक उदाहरण है।

[Test Initialize] 
Setup(<-possible parameter->) 

[Test Method] 
TestA() 

अब मैं टेस्टा() को कई बार चलाने के लिए चाहता हूं। प्रत्येक बार जब टेस्ट शुरू होता है तो दूसरा प्रारंभिक संयोजन चुनता है।

अधिक स्पष्टीकरण

चलें एक परीक्षण चर एक की आवश्यकता होगी लगता है, बी, सी उनमें से प्रत्येक अंतिम परिणाम है कि संयोजन की एक बड़ी संख्या का गठन किया जा सकता है के साथ बहुत जटिल वस्तुओं रहे हैं। तो मैं उम्मीद कर रहा हूं कि किसी भी तरह से मैं एक परीक्षण शुरू कर सकता हूं जो इस तरह के संयोजनों की सूची के माध्यम से संभव हो सकता है, इसलिए यह उन्हें प्रारंभ करेगा, टेस्टा चलाएगा, सूची में अगली शुरुआत में वापस जायेगा, टेस्टा को फिर से चलाएगा सूची समाप्त हो जाती है। इसके बाद यह टेस्टबी के लिए एक और सूची चुनता है और एक बार फिर इस प्रक्रिया का पालन करता है।

कम से कम मुझे उम्मीद है कि किसी दिए गए टेस्ट फ़ंक्शन को चलाने में सक्षम होने की क्षमता कुछ बार हो। बाकी मुझे पता है कि यह संभव हो सकता है कि यह संभव हो सकता है

+5

बहुत सारे ढांचे उपलब्ध हैं ...कृपया प्रश्न पूछने से पहले कुछ खोज करें – emartel

+2

क्या आप समझते हैं कि मैं क्या पूछ रहा हूं? मुझे पता है कि बहुत सारे ढांचे हैं, मैं उनमें से दो या तीन का उपयोग करता हूं, मुझे आवश्यक इकाई परीक्षण के लिए बार-बार चलाने की आवश्यकता होती है, जबकि प्रारंभिक कार्य भिन्न होता है। –

उत्तर

3

आप किसी भी फ्रेमवर्क-विशिष्ट एडॉन्स की आवश्यकता के बिना ऐसा करने में सक्षम हो सकते हैं जिसमें एक सार आधार वर्ग है जिसमें आपके सभी परीक्षण फ़ंक्शंस हैं, फिर कई वर्गों के साथ उस बेस क्लास को विरासत में मिलाकर , प्रत्येक अपने स्वयं के सेटअप समारोह के साथ।

 
public abstract class MyTests 
{ 
    [Test] 
    public void TestOne() 
    { 
     ... 
    } 

    [Test] 
    public void TestTwo() 
    { 
     ... 
    } 
} 
 
[TestFixture] 
public class FirstSetup : MyTests 
{ 
    [Setup] 
    public void Setup() 
    { 
     ... 
    } 
} 

[TestFixture] 
public class SecondSetup : MyTests 
{ 
    [Setup] 
    public void Setup() 
    { 
     ... 
    } 
} 

मैं अन्य भाषाओं में इस किया है, लेकिन यकीन है कि कैसे विभिन्न सी # चौखटे इसे संभाल नहीं।

+0

उम्म परीक्षण शुरू करने में संयोजनों की संख्या मुझे इस दृष्टिकोण का उपयोग करने से रोकती है, वे काफी हद तक घातीय हो सकते हैं या जिस तरह से मैं उम्मीद कर रहा हूं कि वे संभावित प्रारंभिकताओं की सूची से उठाएंगे .. I ' एम –

+0

फिर हाँ, यह विधि शायद आपके लिए काम नहीं करेगी। –

+0

दूसरी तरफ मुझे 3 अलग-अलग सेटअप (3 अलग-अलग धारावाहिक) के लिए एक ही परीक्षण चलाया गया था और यह वही था जो मुझे चाहिए था। धन्यवाद! –

7

NUnit में आप साधारण प्रकार के लिए [testcase] विशेषता का उपयोग कर सकते हैं:

[Test] 
[TestCase("a", "b")] 
[TestCase("c", "b")] 
[TestCase("a", "d")] 
public void TestMethod(string param1, string param2){ 
    // run your test with those parameters 
} 

या आप जटिल प्रकार के लिए एक TestCaseSource विधि का उपयोग कर सकते हैं:

[Test] 
[TestCaseSource("GetTestCases")] 
public void TestMethod(MyObject1 param1, MyObject2 param2){ 
    // run your test with those parameters 
} 

private IEnumerable GetTestCases(){ 
    yield return new TestCaseData(new MyObject1("first test args"), 
            new MyObject2("first test args")) 
         .SetName("SomeMeaningfulNameForThisTestCase"); 
    yield return new TestCaseData(new MyObject1("2nd test args"), 
            new MyObject2("2nd test args")) 
         .SetName("SomeMeaningfulNameForThisTestCase2"); 

} 

आप एमएस में इसी तरह कुछ कर सकते हैं - डेटासोर्स का उपयोग कर टेस्ट: http://codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx

+0

अब यह बहुत ही आशाजनक लग रहा है, मैं इसे आजमाउंगा :) –

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