vscode visual tag studio para instalar extensiones code brackethighlighter visual-studio visual-studio-2010 mstest vs-unit-testing-framework

tag - ¿Por qué se desactiva TestInitialize para cada prueba en mis pruebas de unidad de Visual Studio?



visual studio code autocomplete html (4)

Ejemplo completo

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); } } }

Estoy usando Visual Studio 2010 Beta 2. Tengo un solo [TestClass] , que tiene un [TestInitialize] , [TestCleanup] y algunos [TestMethods] .

Cada vez que se ejecuta un método de prueba, también se ejecutan los métodos de inicialización y limpieza.

Tenía la impresión de que [TestInitialize] y [TestCleanup] solo deberían ejecutarse una vez, por prueba local.

¿Es eso correcto? Si no, ¿cuál es la forma correcta de hacer esto?


Los métodos marcados con el atributo [TestInitialize ()] se utilizan para preparar aspectos del entorno en el que se ejecutará la prueba unitaria. El propósito de esto es establecer un estado conocido para ejecutar su prueba unitaria. Puede usar el método [TestInitialize ()] para copiar, alterar o crear ciertos archivos de datos que su prueba utilizará.

Cree métodos que estén marcados con el atributo [TestCleanUp {}] para devolver el entorno a un estado conocido después de que se haya ejecutado una prueba. Esto podría significar la eliminación de archivos en carpetas o la devolución de una base de datos a un estado conocido. Un ejemplo de esto es reiniciar una base de datos de inventario a un estado inicial después de probar un método que se utiliza en una aplicación de entrada de pedidos.

Para obtener más información, consulte: http://msdn.microsoft.com/en-us/library/ms182517%28v=vs.100%29.aspx


este es un comportamiento bastante estándar para suites de prueba: configuración y desmontaje antes y después de cada prueba. La filosofía es que las pruebas no deben depender el uno del otro. Si desea otro comportamiento, probablemente debería usar objetos estáticos que persisten entre cada prueba.


TestInitialize y TestCleanup se TestCleanup antes y después de cada prueba, esto es para garantizar que ninguna prueba esté acoplada.

Si desea ejecutar métodos antes y después de TODAS las pruebas, decore los métodos relevantes con los atributos ClassInitialize y ClassCleanup .

Información relevante del archivo de prueba generado automáticamente en Visual Studio:

Puede usar los siguientes atributos adicionales a medida que escribe sus pruebas:

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