Dlaczego TestInitialize jest zwalniany za każdy test w moim Visual Studio unit tests?

Używam Visual Studio 2010 Beta 2. Mam jeden [TestClass], który ma [TestInitialize], [TestCleanup] i kilka [TestMethods].

Za każdym razem, gdy uruchamiana jest metoda testowa, uruchamiane są również metody initialize i cleanup!

Odniosłem wrażenie, że [TestInitialize] & [TestCleanup] powinien być uruchamiany tylko raz, na lokalny test.

Czy to prawda? Jeśli nie, to jaki jest właściwy sposób, aby to zrobić?
Author: abatishchev, 2009-12-09

4 answers

TestInitialize i TestCleanup są uruchamiane przed i po każdym badaniu, ma to na celu zapewnienie, że żadne testy nie są połączone.

Jeśli chcesz uruchamiać metody przed i po wszystkich testach, udekoruj odpowiednie metody atrybutami ClassInitialize i ClassCleanup.

Istotne informacje z automatycznie wygenerowanego pliku testowego w Visual Studio:

Możesz używać następujących dodatkowych atrybutów podczas pisania testów:

// 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() { }
 255
Author: alexn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-06 20:46:53

Jest to raczej standardowe zachowanie dla zestawów testowych: setup i tearddown przed i po każdym teście. Filozofia jest taka, że testy nie powinny zależeć od siebie nawzajem. Jeśli chcesz mieć inne zachowanie, prawdopodobnie powinieneś użyć obiektów statycznych, które utrzymują się między każdym testem.

 10
Author: stijn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-09 12:10:09

Pełny przykład zaczerpnięty z dokumentacji 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);
        }
    }
}
 5
Author: Rodolpho Brock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 10:39:24

Metody oznaczone atrybutem [TestInitialize()] służą do przygotowania aspektów środowiska, w którym będzie uruchomiony test jednostkowy. Celem tego jest ustalenie znanego stanu dla przeprowadzenia testu jednostkowego. Możesz użyć metody [TestInitialize ()], aby skopiować, zmienić lub utworzyć określone pliki danych, z których będzie korzystać twój test.

Tworzy metody, które są oznaczone atrybutem [TestCleanUp {}], aby przywrócić środowisko do znanego stanu po uruchomieniu testu. Może to oznaczać usuwanie plików w folderach lub powrót bazy danych do znanego stanu. Przykładem tego jest Resetowanie bazy danych zapasów do stanu początkowego po przetestowaniu metody używanej w aplikacji wprowadzania zamówień.

Aby uzyskać więcej informacji, zapoznaj się z : http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx

 -1
Author: Pushkar Prabhu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-27 11:24:53