c# - unit - Las clases marcadas con TestInitialize y TestCleanup no se ejecutan
visual studio unit tests (3)
He estado luchando con este, espero que ayude a alguien más.
Al crear pruebas unitarias utilizando MsTest, descubrí que estaba repitiendo el mismo código en cada prueba y encontré un par de atributos útiles ( TestInitialize
, TestCleanup
, ClassInitialize
y ClassCleanup
).
Supuestamente, cuando marca un método con uno de estos atributos, debe ejecutarse automáticamente (antes de cada prueba, después de cada prueba, antes de todas las pruebas y después de todas las pruebas, respectivamente). Frustrantemente, esto no sucedió, y mis pruebas fallaron. Si se llama directamente a estos métodos desde las clases marcadas con el atributo TestMethod
, las pruebas tuvieron éxito. Era evidente que no se estaban ejecutando por sí mismos.
Aquí hay un código de ejemplo que estaba usando:
[TestInitialize()]
private void Setup()
{
_factory = new Factory();
_factory.Start();
}
Entonces, ¿por qué esto no se está ejecutando?
TestInitialize y TestCleanup se ejecutan antes y después de todas las pruebas, no antes y después de cada una.
Eso es incorrecto, vea por ejemplo este enlace: http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/85fb6549-cbaa-4dbf-bc3c-ddf1e4651bcf
Véase también MSDN
El código de ejemplo muestra cómo usar TestInitialize, ClassInitialize y AssemblyInitialize.
El truco es hacer public
estos métodos:
[TestInitialize()]
public void Setup()
{
_factory = new Factory();
_factory.Start();
}
Cuando son private
no se ejecutan.
También tuve el problema y, debido a mi falta de comprensión de cómo se llaman los métodos, lo resolví con esto: haga que sus pruebas se hereden de la clase que contiene los métodos TestInitialize y TestCleanup.