Mengapa TestInitialize dipecat untuk setiap tes dalam tes unit Visual Studio saya?


158

Saya menggunakan Visual Studio 2010 Beta 2. Saya punya satu [TestClass], yang memiliki [TestInitialize], [TestCleanup]dan beberapa [TestMethods].

Setiap kali metode pengujian dijalankan, metode inisialisasi dan pembersihan JUGA dijalankan!

Saya mendapat kesan bahwa [TestInitialize]& [TestCleanup]hanya boleh dijalankan sekali, per uji coba lokal.

Apakah itu benar? Jika tidak, apa cara yang tepat untuk melakukan ini?

Jawaban:


314

TestInitializedan TestCleanupdijalankan sebelum dan sesudah setiap tes, ini untuk memastikan bahwa tidak ada tes yang digabungkan.

Jika Anda ingin menjalankan metode sebelum dan sesudah SEMUA tes, hiasi metode yang relevan dengan atribut ClassInitializedan ClassCleanup.

Informasi yang relevan dari file uji yang dibuat secara otomatis di Visual Studio:

Anda dapat menggunakan atribut tambahan berikut saat menulis tes:

// 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
dan Anda memiliki dua lagi AssemblyInitialize dan AssemblyCleanup seperti yang disebutkan di sini stackoverflow.com/a/21304674/864201
Rodolpho Brock

12

ini adalah perilaku standar untuk suite tes: pengaturan dan teardown sebelum dan sesudah setiap tes. Filsafatnya adalah bahwa tes tidak harus saling bergantung. Jika Anda menginginkan perilaku lain, Anda mungkin harus menggunakan objek statis yang bertahan di antara setiap tes.


9

Contoh lengkap diambil dari dokumentasi 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

Metode yang ditandai dengan atribut [TestInitialize ()] digunakan untuk menyiapkan aspek lingkungan di mana tes unit Anda akan berjalan. Tujuannya adalah untuk menetapkan kondisi yang diketahui untuk menjalankan tes unit Anda. Anda dapat menggunakan metode [TestInitialize ()] untuk menyalin, mengubah, atau membuat file data tertentu yang akan digunakan pengujian Anda.

Buat metode yang ditandai dengan atribut [TestCleanUp {}] untuk mengembalikan lingkungan ke kondisi yang diketahui setelah tes dijalankan. Ini mungkin berarti penghapusan file dalam folder atau kembalinya database ke kondisi yang diketahui. Contohnya adalah mengatur ulang database inventaris ke kondisi awal setelah menguji metode yang digunakan dalam aplikasi entri-pesanan.

Untuk informasi lebih lanjut silakan merujuk: http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.