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