2009-03-12 9 views
25

क्या असेंबली में प्रत्येक परीक्षण से पहले विशिष्ट विधि को चलाने के लिए संभव है?एमएसटेस्ट - असेंबली में प्रत्येक परीक्षण से पहले निष्पादन विधि

मुझे TestInitialize विशेषता के बारे में पता है लेकिन इस विशेषता में "वर्ग स्कोप" है। यदि इसे किसी टेस्ट क्लास में परिभाषित किया गया है तो इसे इस कक्षा से प्रत्येक परीक्षा से पहले निष्पादित किया जाएगा।

मैं एक ऐसी विधि को परिभाषित करना चाहता हूं जिसे पूरे असेंबली में परिभाषित प्रत्येक परीक्षण से पहले निष्पादित किया जाएगा।

उत्तर

11

पर उपलब्ध है, मुझे यकीन नहीं है कि यह सुविधा अन्य परीक्षण ढांचे (जैसे एमबीयूनीट) जैसे बॉक्स से बाहर एमएसटेस्ट में संभव है।

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

और शायद एक और समाधान है, तो आप अपनी कस्टम टेस्ट विशेषता बना सकते हैं - लेकिन मैंने अभी तक यह कोशिश नहीं की है ... :)

0

मुझे लगता है कि आप ClassInitialize विशेषता के लिए देख रहे हैं।

+2

ClassInitialize सभी वर्ग के लिए एक बार निष्पादित कर रहा है। तो यदि हमारे पास कक्षा में 5 परीक्षण हैं, तो क्लासइन्स्टिलाइज के साथ विधि एक बार निष्पादित की जाती है। – brzozow

+2

हाँ, वह शायद टेस्ट आरंभ करना था। –

1

अच्छी तरह से प्रत्येक परीक्षण के लिए कक्षा को तुरंत शुरू नहीं किया जा रहा है? यह मेरी समझ थी। ऐसे मामले में जो भी आप अपने कन्स्ट्रक्टर से कॉल करते हैं वह प्रारंभिक कोड (परिभाषा द्वारा प्रति परीक्षण) है।

संपादित करें: यदि यह काम नहीं करता है (जो मुझे अभी भी लगता है कि यह होना चाहिए क्योंकि एमएसटीएस्ट को यह सुनिश्चित करने की आवश्यकता है कि व्यक्तिगत परीक्षण विधि अलग हो) तो TestInitialize आपकी विशेषता है। वैसे सबसे अच्छी यूनिट-टेस्ट तुलना Link on Codeplex

+0

मैं कोड लिखना चाहता हूं जो सभी टेस्ट कक्षाओं में सभी परीक्षणों से पहले निष्पादित होगा। तो आपका समाधान केवल एक टेस्ट क्लास – brzozow

+0

पर काम करेगा, यह सच नहीं है। यदि यह सच है कि एमएसटीएस्ट दोहन प्रति परीक्षण नए टेस्ट क्लास इंस्टेंस को तत्काल करेगा (जो मुझे विश्वास है कि टेस्ट अलगाव उद्देश्य के लिए सच है) तो कन्स्ट्रक्टर में कोड प्रत्येक टेस्ट विधि से पहले चलता है। –

+0

यह सच है कि आप क्या लिखते हैं लेकिन यह मेरी समस्या को हल नहीं कर रहा है। मैं प्रत्येक टेस्ट से पहले कुछ स्थिर गुणों को रीसेट करना चाहता हूं (मुझे पता है कि यह खराब डिज़ाइन है)। मेरे पास यूनिट टेस्ट के साथ 400 कक्षाएं हैं। मैं सभी वर्गों में उस कोड को लिखना नहीं चाहता हूं। – brzozow

52

[TestInitialize()] आपको जो चाहिए वह है।

private string dir; 

[TestInitialize()] 
public void Startup() 
{ 
    dir = Path.GetTempFileName(); 
    MakeDirectory(ssDir); 
} 

[TestCleanup()] 
public void Cleanup() 
{ 
    ss = null; 
    Directory.SetCurrentDirectory(Path.GetTempPath()); 

    setAttributesNormal(new DirectoryInfo(ssDir)); 
    Directory.Delete(ssDir, true); 
} 


[TestMethod] 
public void TestAddFile() 
{ 
    File.WriteAllText(dir + "a", "This is a file"); 
    ss.AddFile("a"); 
    ... 
} 

[TestMethod] 
public void TestAddFolder() 
{ 
    ss.CreateFolder("a/"); 
    ... 
} 

यह प्रत्येक परीक्षा के लिए एक नई यादृच्छिक अस्थायी पथ देता है, और इसे हटा देता है इसके पूर्ण हो जाने। आप इसे डीबग में चलाकर और प्रत्येक टेस्ट केस के लिए डीआईआर वैरिएबल को देखकर सत्यापित कर सकते हैं।

+3

स्टार्टअप विधि केवल एक वर्ग से परीक्षण निष्पादित करने से पहले ही लागू की जाएगी। मैं असेंबली – brzozow

+1

एफटीक्यू में सभी वर्गों के सभी परीक्षणों से पहले विधि निष्पादित करना चाहता हूं "क्या प्रत्येक परीक्षण से पहले विशिष्ट विधि को चलाने के लिए संभव है?"। मैंने जवाब दिया। यदि आपका मतलब है "एक विधि सभी परीक्षणों से पहले एक बार चलती है", तो आपका उत्तर यहां है: http://stackoverflow.com/questions/639326/mstest-executing-method-before-each-test/639339#639339 – FryGuy

+1

उत्तर के लिए Thx। लेकिन मैं असेंबली में प्रत्येक परीक्षण से पहले विधि निष्पादित करना चाहता हूं - प्रत्येक एक विशिष्ट वर्ग में पहले नहीं। शायद मेरा सवाल पर्याप्त स्पष्ट नहीं था। – brzozow

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