c# - visual - ¿Se puede usar TestContext.Properties?
unit testing c# visual studio 2017 (3)
Usando Visual Studio generamos la clase Test Unit. Luego comenta en, el método de inicialización de clase. Dentro de él agrega tu propiedad, usando el argumento testContext.
Tras el inicio de la aplicación de prueba, este método es llamado por la infraestructura de prueba.
//Use ClassInitialize to run code before running the first test in the class
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
/*
* Any user defined testContext.Properties
* added here will be erased after this method exits
*/
testContext.Properties.Add("key", 1 ) ; // place the break point here
}
Después de abandonar MyClassInitialize, todas las propiedades agregadas por el usuario se pierden. Sólo quedan los 10 "oficiales".
En realidad, TestContext se sobrescribe con el oficial de oficina, cada vez que se llama a cada método de prueba. No se sobrescribe solo si el usuario tiene un método de inicialización de prueba, los cambios realizados allí se pasan a la prueba.
//Use TestInitialize to run code before running each test
[TestInitialize()]public void MyTestInitialize(){
this.TestContext.Properties.Add("this is preserved",1) ;
}
Esto efectivamente significa que TestContext.Properties es "principalmente" solo de lectura, para los usuarios. Lo que no está claramente documentado en MSDN.
Me parece que esto es un diseño muy desordenado + implementación. ¿Por qué tener TestContext.Properties como una colección, en absoluto? Los usuarios pueden hacer muchas otras soluciones para tener una inicialización en toda la clase.
Creo que tienes que conservar una copia del testContext o se quedará fuera del alcance.
Yo añadí:
private TestContext _tc;
y añadido a la inicialización
tc = testContext;
Cuando veo tc en una de las pruebas, contiene la propiedad recién agregada.
El TestContext es único para cada prueba, por lo que la inicialización en ClassInitialize no funcionará. Solo debe usarlo para los métodos TestInitialize, TestCleanup y TestMethod.
Esta publicación hace un buen trabajo al explicar cómo se ejecutan las pruebas de una clase, incluidos los subprocesos.
Dicho esto, todavía no he encontrado un uso para el TestContext pero soy nuevo en MSTest. Estoy de acuerdo en que la documentación de MSDN es confusa. Hacer que todos los métodos de muestra escriban en la consola o arroje un cuadro de mensaje no hace nada para representar las posibilidades.
El TestContext se usa para pasar información a sus pruebas desde afuera. A través del ejecutor de prueba o un archivo .runsettings, por lo general, los datos van en una dirección.