Aquí podría ser tu PUBLICIDAD


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 brzozow
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 FryGuy


Aquí podría ser tu PUBLICIDAD


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 Robert

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 nihique

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 07:20
fuente por usuario David Pokluda

votos
0

Creo que estás buscando el ClassInitializeatributo.

Respondida el 12/03/2009 a las 05:09
fuente por usuario Andrew Hare