मेरे Visual Studio इकाई परीक्षणों में TestInitialize प्रत्येक परीक्षण के लिए क्यों निकाल दिया जाता है?


158

मैं दृश्य स्टूडियो 2010 बीटा 2. उपयोग कर रहा हूँ मैं एक ही मिल गया है [TestClass], जो एक है [TestInitialize], [TestCleanup]और कुछ [TestMethods]

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

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

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

जवाबों:


314

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

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

Visual Studio में स्वतः जनरेट हुई परीक्षण-फ़ाइल से प्रासंगिक जानकारी:

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

// 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() { }

9
और आपके पास दो और विधानसभा हैं। विधानसभा और विधानसभा की तरह यहाँ क्लिक करें stackoverflow.com/a/21304674/864201
रोडोल्फ ब्रॉक

12

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


9

Microsoft दस्तावेज़ से लिया गया पूर्ण उदाहरण :

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);
        }
    }
}

-1

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.