কেন আমার ভিজ্যুয়াল স্টুডিও ইউনিট পরীক্ষাগুলিতে প্রতিটি পরীক্ষার জন্য টেস্টআইনিটাইজালাইজকে চাকরি থেকে বরখাস্ত করা হয়?


158

আমি ভিসুয়াল স্টুডিও 2010 বিটা 2. ব্যবহার করছি আমি একটি একক পেয়েছেন [TestClass], যা একটি হয়েছে [TestInitialize], [TestCleanup]এবং কয়েক [TestMethods]

প্রতিবার যখন কোনও পরীক্ষা পদ্ধতি চালানো হয়, তখন আরম্ভ এবং ক্লিনআপ পদ্ধতিগুলিও ALSO রান!

আমি এই ছাপে ছিলাম যে স্থানীয় পরীক্ষার জন্য প্রতি [TestInitialize]& [TestCleanup]একবার মাত্র একবার চালানো উচিত।

এটা কি ঠিক? যদি তা না হয় তবে এটি করার উপযুক্ত উপায় কী?

উত্তর:


314

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

9
এবং আপনার এখানে আরও দুটি অ্যাসেম্বলিআইনিটায়ালাইজ এবং এসেম্বলি ক্লিনআপ রয়েছে
রডল্ফো

12

এটি বরং পরীক্ষার স্যুটগুলির জন্য আদর্শ আচরণ: প্রতিটি পরীক্ষার আগে এবং পরে সেটআপ এবং টিয়ারডাউন। দর্শনটি হ'ল পরীক্ষাগুলি একে অপরের উপর নির্ভর করে না। আপনি যদি অন্য আচরণ চান, আপনার সম্ভবত স্ট্যাটিক অবজেক্টগুলি ব্যবহার করা উচিত যা প্রতিটি পরীক্ষার মধ্যে স্থির থাকে।


9

মাইক্রোসফ্ট ডকুমেন্টেশন থেকে নেওয়া সম্পূর্ণ উদাহরণ :

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 ()] বৈশিষ্ট্যের সাথে চিহ্নিত চিহ্নিত পদ্ধতিগুলি আপনার ইউনিট পরীক্ষাটি চালাবে এমন পরিবেশের দিকগুলি তৈরি করতে ব্যবহৃত হয়। এর উদ্দেশ্যটি হল আপনার ইউনিট পরীক্ষা চালানোর জন্য একটি পরিচিত রাষ্ট্র প্রতিষ্ঠা করা। আপনার পরীক্ষাটি ব্যবহার করবে এমন নির্দিষ্ট ডেটা ফাইল অনুলিপি করতে, পরিবর্তন করতে বা তৈরি করতে আপনি [টেস্টআইনিটালাইজড ()] পদ্ধতি ব্যবহার করতে পারেন।

পরীক্ষা চালানোর পরে পরিবেশকে একটি পরিচিত অবস্থায় ফিরিয়ে আনতে [টেস্টক্লিয়েনআপ {attrib] বৈশিষ্ট্যযুক্ত চিহ্নিত পদ্ধতিগুলি তৈরি করুন। এর অর্থ ফোল্ডারগুলিতে ফাইলগুলি মুছে ফেলা বা কোনও ডাটাবেসকে কোনও পরিচিত অবস্থায় ফিরিয়ে দেওয়া হতে পারে। এর উদাহরণ হ'ল অর্ডার-এন্ট্রি অ্যাপ্লিকেশনটিতে ব্যবহৃত একটি পদ্ধতি পরীক্ষা করার পরে একটি ইনভেন্টরি ডাটাবেসটিকে প্রাথমিক অবস্থায় পুনরায় সেট করা to

আরও তথ্যের জন্য দয়া করে দেখুন: http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.