MsTest: método de ejecución antes de cada prueba en un ensamblaje

votos
26

¿Es posible ejecutar un método específico antes de cada prueba en un ensamblado?

Sé sobre el TestInitializeatributo, pero este atributo tiene alcance de clase. Si se define en una clase de prueba, se ejecutará antes de cada prueba de esta clase.

Quiero definir un método que se ejecutará antes de cada prueba definida en un conjunto completo.

Publicado el 12/03/2009 a las 17:06
fuente por usuario
En otros idiomas...                            


5 respuestas

votos
54

[TestInitialize()] es lo que necesitas

private string dir;

[TestInitialize()]
public void Startup()
{
    dir = Path.GetTempFileName();
    MakeDirectory(ssDir);
}

[TestCleanup()]
public void Cleanup()
{
    ss = null;
    Directory.SetCurrentDirectory(Path.GetTempPath());

    setAttributesNormal(new DirectoryInfo(ssDir));
    Directory.Delete(ssDir, true);
}


[TestMethod]
public void TestAddFile()
{
    File.WriteAllText(dir + "a", "This is a file");
    ss.AddFile("a");
    ...
}

[TestMethod]
public void TestAddFolder()
{
    ss.CreateFolder("a/");
    ...
}

Esto proporciona una nueva ruta temporal aleatoria para cada prueba y la elimina cuando termina. Puede verificar esto ejecutándolo en depuración y mirando la variable dir para cada caso de prueba.

Respondida el 13/03/2009 a las 01:15
fuente por usuario

votos
13

Que desea utilizar [AssemblyInitialize].

Ver: MSDN Enlace

o esta pregunta: en StackOverflow

Respondida el 27/02/2011 a las 04:08
fuente por usuario

votos
11

No estoy seguro de que esta característica sea posible en MsTest de forma predeterminada, como en otros marcos de prueba (por ejemplo, MbUnit).

Si tengo que usar MsTest, entonces estoy resolviendo esto definiendo la clase abstracta TestBase con el atributo [TestInitialize] y cada prueba que necesita este comportamiento deriva de esta clase base. En su caso, cada clase de prueba en su conjunto debe heredar de esta base ...

Y probablemente haya otra solución, puedes hacer tu atributo de prueba personalizado, pero aún no lo he intentado ... :)

Respondida el 13/03/2009 a las 01:10
fuente por usuario

votos
1

Bueno, ¿no es MSTest instanciando la clase para cada prueba? Esa era mi comprensión de eso. En tal caso, lo que sea que llame desde su constructor es el código de inicialización (por prueba por definición).

EDITAR: si no funciona (lo que todavía creo que debería porque MSTest necesita asegurarse de que las ejecuciones del método de prueba individual estén aisladas), entonces TestInitializees su atributo. Por cierto, la mejor comparación de pruebas unitarias está disponible en Link on Codeplex

Respondida el 12/03/2009 a las 19:20
fuente por usuario

votos
0

Creo que estás buscando el ClassInitializeatributo.

Respondida el 12/03/2009 a las 17:09
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more