2010-03-25 7 views
17

विजुअल स्टूडियो का उपयोग टेस्ट यूनिट कक्षा उत्पन्न करता है। फिर कक्षा प्रारंभिक विधि में टिप्पणी करें। TestContext तर्क का उपयोग करके, इसके अंदर अपनी संपत्ति जोड़ें।TestContext.Properties उपयोग योग्य हैं?

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

//Use ClassInitialize to run code before running the first test in the class 
[ClassInitialize()] 
public static void MyClassInitialize(TestContext testContext) 
{ 
    /* 
    * Any user defined testContext.Properties 
    * added here will be erased after this method exits 
    */ 
    testContext.Properties.Add("key", 1) ; // place the break point here 
} 

MyClassInitialize छोड़ने के बाद, उपयोगकर्ता द्वारा जोड़ा किसी भी गुण खो जाते हैं। केवल 10 "आधिकारिक" छोड़े गए हैं।

वास्तव में टेस्टकॉन्टेक्स्ट को प्रत्येक परीक्षण विधि कहने से पहले, प्रत्येक बार इनटिकल ऑफिकल के साथ अधिलेखित किया जाता है। यह केवल तभी ओवरराइट नहीं किया जाता है जब उपयोगकर्ता परीक्षण प्रारंभिक विधि है, वहां किए गए परिवर्तन परीक्षण में पास किए जाते हैं।

//Use TestInitialize to run code before running each test 
[TestInitialize()]public void MyTestInitialize(){ 
    this.TestContext.Properties.Add("this is preserved",1) ; 
} 

यह प्रभावी ढंग से किया जाता है "ज्यादातर" उपयोगकर्ताओं के लिए केवल पढ़ने के लिए, TestContext.Properties का मतलब है। जो एमएसडीएन में स्पष्ट रूप से दस्तावेज नहीं है।

ऐसा लगता है कि यह बहुत गन्दा डिजाइन + कार्यान्वयन है। एक संग्रह के रूप में TestContext.Properties क्यों है? उपयोगकर्ता कक्षा व्यापक प्रारंभ करने के लिए कई अन्य समाधान कर सकते हैं।

+2

मैंने परीक्षण संदर्भ के उद्देश्य को कभी भी समझा नहीं है जिसे मैं वास्तव में उपयोग करता हूं। –

+0

उद्देश्य https://blogs.msdn.microsoft.com/vstsqualitytools/2006/01/09/using-testcontext-in-unit-tests/ –

उत्तर

1

मेरा मानना ​​है कि आपको testContext की एक प्रति जारी रखना है या यह दायरे से बाहर हो जाएगा।

मैं कहा:

private TestContext _tc; 

और जब मैं परीक्षण यह नए जोड़े गए प्रॉपर्टी वाला में से एक से टीसी को देखने के प्रारंभ

tc = testContext; 

को जोड़ा गया।

+2

में समझाया गया उद्देश्य यह एक टेस्ट यूनिट कक्षा के संदर्भ में काम नहीं करेगा दृश्य स्टूडियो। एक बहुत ही स्पष्ट रेज़न यह है कि मेरी शुरुआती पोस्ट में प्रारंभिक विधि स्थैतिक है। जैसा कि विजुअल स्टूडियो द्वारा उत्पन्न किया गया है। –

11

टेस्टकॉन्टेक्स्ट प्रत्येक परीक्षण के लिए अद्वितीय है, इसलिए क्लासइन्स्टिज़ाईज़ में इसे प्रारंभ करना काम नहीं करेगा। आपको केवल टेस्टइनाइजलाइज, टेस्टक्लेनअप और टेस्टमेथ विधियों के लिए इसका उपयोग करना चाहिए।

This post यह समझाने का एक अच्छा काम करता है कि एक वर्ग के परीक्षण थ्रेडिंग सहित कैसे चलते हैं।

कहा जा रहा है कि, मुझे अभी तक टेस्टकॉन्टेक्स्ट के लिए उपयोग नहीं मिला है, लेकिन मैं एमएसटीएस्ट में नया हूं। मैं सहमत हूं कि एमएसडीएन दस्तावेज उलझन में है। सभी सैंपल विधियों को कंसोल पर लिखना या संदेश बॉक्स फेंकना संभावनाओं का प्रतिनिधित्व करने के लिए कुछ भी नहीं करता है।

+1

सहमत हुए, लेकिन ... जो बिंदु मैं बना रहा हूं वह यह है कि (बदतर) कार्यान्वयन भ्रमित है क्योंकि (बहुत बुरा) यह एक desing पर आधारित है जो उलझन में है। नतीजा बग है, जिसे "फीचर" के रूप में बेचा जा रहा है। –

+0

मुझे दो साल पहले चीजों की स्थिति के बारे में पता नहीं है, लेकिन TestInitialize में गुण जोड़ने की यह विधि काम नहीं करती है। संदेश के साथ एक अपवाद फेंक दिया जाता है "एक ही कुंजी वाला एक आइटम पहले ही जोड़ा जा चुका है"।इसलिए, क्लासइन्स्टिलाइज एक पूरी तरह से अलग टेस्टकॉन्टेक्स्ट पास हो जाता है, लेकिन परीक्षण स्वयं सभी को एक ही टेस्टकॉन्टेक्स्ट मिलता है ... – Amanduh

0

टेस्टकॉन्टेक्स्ट का उपयोग बाहर से आपके परीक्षणों में जानकारी पास करने के लिए किया जाता है। परीक्षण निष्पादक या एक। Runsettings फ़ाइल के माध्यम से, इसलिए इसका आम तौर पर डेटा एक तरफ जा रहा है।

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