119

मैं विजुअल स्टूडियो 2010 बीटा 2 का उपयोग कर रहा हूं। मुझे एक [TestClass] मिला है, जिसमें [TestInitialize], [TestCleanup] और कुछ [TestMethods] हैं।मेरे विजुअल स्टूडियो यूनिट परीक्षणों में प्रत्येक परीक्षण के लिए TestInitialize क्यों निकाल दिया जाता है?

हर बार एक परीक्षण विधि चलती है, प्रारंभिक और सफाई विधि भी चलाए जाते हैं!

मैं इस धारणा के तहत था कि [TestInitialize] & [TestCleanup] प्रति स्थानीय परीक्षण चलाने के बाद केवल एक बार चलाया जाना चाहिए।

क्या यह सही है? यदि नहीं, तो ऐसा करने का सही तरीका क्या है?

उत्तर

241

TestInitialize और TestCleanup प्रत्येक परीक्षण से पहले और बाद में भाग गए हैं, यह सुनिश्चित करना है कि कोई परीक्षण युग्मित न हो।

यदि आप सभी परीक्षणों से पहले और बाद में विधियों को चलाने के लिए चाहते हैं, तो ClassInitialize और ClassCleanup विशेषताओं के साथ प्रासंगिक विधियों को सजाने के लिए।

ऑटो से प्रासंगिक जानकारी दृश्य स्टूडियो में परीक्षण फ़ाइल उत्पन्न:

आप नीचे दिए गए अतिरिक्त विशेषताओं का उपयोग कर सकते हैं जैसा कि आप अपने परीक्षण लिखें:

// Use ClassInitialize to run code before running the first test in the class 
[ClassInitialize()] 
public static void MyClassInitialize(TestContext testContext) { } 

// Use ClassCleanup to run code after all tests in a class have run 
[ClassCleanup()] 
public static void MyClassCleanup() { } 

// Use TestInitialize to run code before running each test 
[TestInitialize()] 
public void MyTestInitialize() { } 

// Use TestCleanup to run code after each test has run 
[TestCleanup()] 
public void MyTestCleanup() { } 
+4

और आप दो और AssemblyInitialize और AssemblyCleanup है यहाँ http://stackoverflow.com/a/21304674/864201 –

+2

विल उल्लेख की तरह परीक्षण [अनदेखा] चिह्नित परीक्षणों के लिए परीक्षण शुरू करें? –

10

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

-1

तरीके कि [TestInitialize के साथ चिह्नित हैं() ] विशेषता का उपयोग पर्यावरण के पहलुओं को तैयार करने के लिए किया जाता है जिसमें आपका यूनिट परीक्षण चलाया जाएगा। इसका उद्देश्य आपके यूनिट परीक्षण को चलाने के लिए एक ज्ञात राज्य स्थापित करना है। आप अपनी टेस्ट का उपयोग करने वाली कुछ डेटा फ़ाइलों की प्रतिलिपि बनाने, बदलने या बनाने के लिए [TestInitialize()] विधि का उपयोग कर सकते हैं।

परीक्षणों के बाद किसी ज्ञात स्थिति में पर्यावरण को वापस करने के लिए [TestCleanUp {}] विशेषता के साथ चिह्नित विधियां बनाएं। इसका मतलब हो सकता है कि फ़ोल्डर में फ़ाइलों को हटाने या किसी ज्ञात स्थिति में डेटाबेस की वापसी। इसका एक उदाहरण ऑर्डर-एंट्री एप्लिकेशन में उपयोग की जाने वाली विधि का परीक्षण करने के बाद प्रारंभिक स्थिति में एक इन्वेंट्री डेटाबेस को रीसेट करना है।

अधिक जानकारी के लिए देखें: http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx

5

पूर्ण उदाहरण

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using SampleClassLib; 
using System; 
using System.Windows.Forms; 

namespace TestNamespace 
{ 
    [TestClass()] 
    public sealed class DivideClassTest 
    { 
     [AssemblyInitialize()] 
     public static void AssemblyInit(TestContext context) 
     { 
      MessageBox.Show("AssemblyInit " + context.TestName); 
     } 

     [ClassInitialize()] 
     public static void ClassInit(TestContext context) 
     { 
      MessageBox.Show("ClassInit " + context.TestName); 
     } 

     [TestInitialize()] 
     public void Initialize() 
     { 
      MessageBox.Show("TestMethodInit"); 
     } 

     [TestCleanup()] 
     public void Cleanup() 
     { 
      MessageBox.Show("TestMethodCleanup"); 
     } 

     [ClassCleanup()] 
     public static void ClassCleanup() 
     { 
      MessageBox.Show("ClassCleanup"); 
     } 

     [AssemblyCleanup()] 
     public static void AssemblyCleanup() 
     { 
      MessageBox.Show("AssemblyCleanup"); 
     } 

     [TestMethod()] 
     [ExpectedException(typeof(System.DivideByZeroException))] 
     public void DivideMethodTest() 
     { 
      DivideClass.DivideMethod(0); 
     } 
    } 
} 
संबंधित मुद्दे