मुझे आश्चर्य है कि एमएसटीएस्ट के तहत एक टेस्ट क्लास में इंस्टेंस चर शुरू करने के लिए सबसे अच्छा अभ्यास क्या है। मान लीजिए कि मेरे पास एक टेस्ट क्लास है जहां सहायक वस्तुओं को मजाक करने और स्थापित करने के लिए बहुत अधिक ओवरहेड है। मैं प्रत्येक परीक्षण में एक ही कोड को दोहराने के बजाय, इसे एक बार करना चाहता हूं। मेरा विचार था कि कुछ परीक्षण उदाहरणों को शुरू करने के लिए MyClassInitialize विधि का उपयोग करना था, जिसमें सभी परीक्षणों तक पहुंच थी। इस तरह, मैं एक बार ग्लोबल इंस्टेंस वैरिएबल को प्रारंभ करता हूं और इन्हें चलाने के बाद प्रत्येक टेस्ट द्वारा उपयोग किया जाता है।एमएसटीएस्ट, MyClassInitialize, और आवृत्ति चर
दुर्भाग्यवश, MyClassInitialize विधि स्थिर है, इसलिए वैश्विक आवृत्ति चर प्रारंभ नहीं कर सकते हैं। मैंने वैश्विक आवृत्ति चर स्थिर बनाने के बारे में सोचा, लेकिन यह सही समाधान प्रतीत नहीं होता है। मैंने अगली बार टेस्ट क्लास के कन्स्ट्रक्टर में प्रारंभिक कोड डालने के बारे में सोचा, लेकिन मेरे अंदर कुछ कहता रहता है कि MyClassInitialize वह है जो मुझे उपयोग करना है। एक और विचार MyTestInitialize का उपयोग करना होगा क्योंकि यह विधि स्थैतिक नहीं है, लेकिन यह प्रत्येक परीक्षण के साथ ऑब्जेक्ट को और अधिक बना देगा। क्या यह उचित है?
क्या परीक्षणों में वेरिएबल्स का उपयोग करने के लिए सर्वोत्तम प्रथाएं हैं जहां परीक्षणों को चलाने से पहले उन चरों को केवल आरंभ करने की आवश्यकता है? नीचे मैं किस बारे में बात कर रहा हूं उसका एक संक्षिप्त उदाहरण है।
[TestClass()]
public class ProgramTest
{
// this object requires extensive setup so would like to just do it once
private SomeObjectThatIsUsedByAllTestsAndNeedsInitialization myObject;
private TestContext testContextInstance;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// initializing SomeObjectThatIsUsedByAllTestsAndNeedsInitialization clearly will
// not work here because this method is static.
}
[TestMethod()]
public void Test1()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test2()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test3()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
}
वास्तव में स्थिर के साथ मेरी समस्या को प्रमाणित नहीं कर सकता। यह सिर्फ सही महसूस नहीं करता है, लेकिन मैं क्यों समझा नहीं सकता। – meyousikmann
स्टेटिक का मतलब कक्षा के स्वामित्व में है। जो चीजें स्थिर नहीं हैं वे वर्ग के उदाहरणों के स्वामित्व में हैं। यह निर्धारित करने की कोशिश करते समय कि कोई चीज़ स्थैतिक होनी चाहिए, खुद से पूछें 'क्या यह कक्षा के स्वामित्व में है या सिर्फ एक उदाहरण है?' – Tristan