¿Es posible ejecutar código una vez antes de que se ejecuten todas las pruebas?


Básicamente me gustaría decirle a MSTest que ejecute un poco de código antes de iniciar una serie de ejecuciones de prueba, esencialmente lo que me gustaría hacer es lo mismo que pegar algo de código en Main().

La razón por la que me gustaría hacer esto es que me gustaría hacer algunos registros con log4net durante mis ejecuciones de prueba de integración. No puedo simplemente usar el atributo log4net.Config.XmlConfigurator assembly ya que en el momento en que lo lee en mi ensamblado de prueba ya ha llamado LoggerManager. La documentación recomienda configurar log4net explícitamente en el punto de entrada de código, pero ¿dónde está eso en mis pruebas?

Necesito poder ejecutar mis pruebas en TestDriven.NET y MSTest runner.

 86
Author: Ohad Schneider, 2010-03-04

3 answers

FWIW, puede usar el atributo AssemblyInitialize para ejecutar código antes de que se ejecuten todas las pruebas unitarias en un ensamblaje:

[TestClass]
public class SetupAssemblyInitializer
{
    [AssemblyInitialize]
    public static void AssemblyInit(TestContext context)
    {
        // Initalization code goes here
    }
}

Si tiene más de un ensamblado de prueba de unidad, no tengo conocimiento de nada que abarque más de un ensamblado.

Por lo que sé, esto es lo más cerca que se puede llegar a un equivalente principal.

Tenga en cuenta que el método AssemblyInitialize-decorado debe estar en una clase TestClass-decorado que contenga al menos un método TestMethod - decorado, de lo contrario no se ejecutará!

 112
Author: Mark Seemann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-09 11:18:16

Para completar, estas son las opciones "ejecutar código antes" para MSTest:

  • Use [AssemblyInitialize] para ejecutar código una vez por ensamblado, antes de que se ejecute cualquier prueba en ese ensamblado.
  • Use [ClassInitialize] para ejecutar el código una vez por clase, antes de cualquier prueba en la clase donde se define el método.
  • Use [TestInitialize] para ejecutar código antes de cada prueba en la clase donde se define el método.
 31
Author: Konamiman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-28 14:52:37

Veo esto en el encabezado de prueba de MS.

// Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext) { }

Esto se ejecutaría antes de las pruebas en una clase.

Parece que quieres ejecutar algo antes de todas las pruebas.

También existe la opción setup script en la configuración de ejecución de prueba.

 11
Author: Maestro1024,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-04 20:46:44