2010-08-27 4 views
31

क्या कोई वैश्विक स्थिति कहीं है कि मैं वर्तमान में चल रहे परीक्षण नाम तक पहुंच सकता हूं?प्रोग्रामिंग के रूप में NUnit परीक्षण नाम का उपयोग कैसे करें?

मैंने परीक्षण किया है कि कौन सी आउटपुट फाइलें निर्देशिका में फाइलें हैं और उन्हें वापस पढ़ती हैं। मैं चाहता हूं कि प्रत्येक परीक्षा में खेलने के लिए एक निर्देशिका तैयार करें और उसके बाद साफ हो जाएं, और मैं उस नाम को धक्का नहीं देना चाहता (मुझे इसे अद्वितीय बनाना होगा, और फिर सुनिश्चित करें कि प्रत्येक परीक्षण इसे अद्वितीय रखता है; ew)। मैं एक GUID का उपयोग कर सकता था, लेकिन मुझे लगता है कि सहायक उपकरण यह मानने में सक्षम होंगे कि "यह वह स्थान है जहां टेस्ट फाइलों को संग्रहीत किया जाना चाहिए" बिना उन GUID को धक्का दिए बिना। फिर, यह कहीं भी एक वैश्विक राज्य के लिए उगता है।

असल में, मुझे TestRunner.Current.CurrentTest.Name जैसे कॉल चाहिए। क्या ऐसी किसी वस्तु का अस्तित्व है?

उत्तर

22

मैं 2.5.7 अभी तक अपने आप को अपग्रेड नहीं किया है, लेकिन यह एक TestContext वर्ग जो केवल आपके लिए क्या देख रहे हैं प्रदान करने के लिए लगता है शामिल हैं: http://www.nunit.org/index.php?p=releaseNotes&r=2.5.7

+0

यह बहुत अच्छा काम करता है। मैं किसी भी वर्ण को बाहर निकालने के लिए रेगेक्स का उपयोग करता हूं जो निर्देशिका नाम में काम नहीं करता है, और यह सब अच्छा है। धन्यवाद! – TALlama

+0

कोड में इसका उपयोग करने के लिए, स्थिर CurrentContext विधि को कॉल करके TestContext प्राप्त करें। तो, उदाहरण के लिए: TestContext.CurrentContext.Test.Name –

4

अपने एनयूनीट कोड में प्रति टेस्ट एक विधि मानते हुए, आप स्टैकट्रैस से विधि का नाम प्राप्त करने के लिए प्रतिबिंब का उपयोग कर सकते हैं।

string MethodName = new StackFrame(1).GetMethod().Name; 

question 44153, "Can you use reflection to find the name of the currently executing method?" के जवाब देखें:

आप अन्य विधियों के द्वारा कहा जाता है इस फाइल को प्रवेश करने के लिए अपने NUnit कोड में एक सहायक विधि लिखते हैं, आप पिछले विधि के लिए जाँच करने के लिए इस वाक्य रचना का उपयोग कर सकते अधिक जानकारी के लिए।

+0

यह [टेस्टकेस] विधियों को संभाल नहीं पाएगा जिन्हें कई बार कहा जाता है, लेकिन यह आपको प्रतिनिधि पाने के लिए पर्याप्त है। – TALlama

25

(यह मानते हुए C#)

NUnit.Framework.TestContext.CurrentContext.Test.Name 

या

NUnit.Framework.TestContext.CurrentContext.Test.FullName 
+0

यह मूल रूप से का उपयोग करने का सुझाव दिया गया था। गेट टाइप()। ToString() यदि आप आलसी थे; हालांकि यह टेस्टकेससोर्स संचालित परीक्षणों के लिए काम नहीं करता है, आपको सभी परिदृश्यों में कार्य करने के लिए टेस्टकॉन्टेक्स्ट से दो अधिभारों में से एक का उपयोग करना होगा। – aolszowka