Me pregunto cuál es la mejor práctica para inicializar variables de instancia en una clase de prueba bajo MSTest. Digamos que tengo una clase de prueba donde hay una gran cantidad de gastos indirectos para burlarse y configurar objetos de apoyo. Solo quiero hacer esto una vez, en lugar de repetir el mismo código en cada prueba. Mi idea era utilizar el método MyClassInitialize para inicializar algunas variables de instancia globales a las que todas las pruebas tenían acceso. De esa forma, inicializo las variables de instancia global una vez y cada una de ellas las usa cuando se ejecutan.MSTest, MyClassInitialize y variables de instancia
Desafortunadamente, el método MyClassInitialize es estático, por lo que no puede inicializar variables de instancia globales. Pensé en hacer las variables de instancia globales estáticas, pero no parece ser la solución correcta. Luego pensé en poner el código de inicialización en un constructor de la clase de prueba, pero algo dentro de mí sigue diciendo que MyClassInitialize es lo que se supone que debo usar. Otro pensamiento sería usar MyTestInitialize ya que ese método no es estático, pero eso crearía el objeto una y otra vez con cada prueba. ¿Es eso apropiado?
¿Existen mejores prácticas para el uso de variables en pruebas donde esas variables solo se deben inicializar una vez antes de ejecutar las pruebas? A continuación se muestra un ejemplo artificial de lo que estoy hablando.
[TestClass()]
public class ProgramTest
{
// this object requires extensive setup so would like to just do it once
private SomeObjectThatIsUsedByAllTestsAndNeedsInitialization myObject;
private TestContext testContextInstance;
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext)
{
// initializing SomeObjectThatIsUsedByAllTestsAndNeedsInitialization clearly will
// not work here because this method is static.
}
[TestMethod()]
public void Test1()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test2()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
[TestMethod()]
public void Test3()
{
// use SomeObjectThatIsUsedByAllTestsAndNeedsInitialization here
}
}
Realmente no puedo cuantificar mi problema con la estática. Simplemente no se "siente" bien, pero no puedo explicar por qué. – meyousikmann
Estático significa que pertenece a la clase. Las cosas que no son estáticas son propiedad de instancias de la clase. Al tratar de determinar si algo debe ser estático, pregúntese: "¿Es propiedad de la clase como un todo o solo una instancia?". – Tristan