El constructor es solo una estructura proporcionada por el idioma. Cada marco de prueba parece tener su propio ciclo de vida controlado "inicializar". Probablemente solo tendrá problemas al usar el constructor para mutar sus locals.
MSTest: Obtiene una instancia completamente nueva de la clase de prueba para cada TestMethod
. Este podría ser el único caso en el que está permitido cambiar las ubicaciones locales en el constructor, el inicializador o el método de prueba y no afectar los otros métodos de prueba.
public class TestsForWhatever
{
public TestsForWhatever()
{
// You get one of these per test method, yay!
}
[TestInitialize]
public void Initialize()
{
// and one of these too!
}
[TestMethod]
public void AssertItDoesSomething() { }
[TestMethod]
public void AssertItDoesSomethingElse() { }
}
MSpec: Sólo tienes una Establish
y Because
para todas sus afirmaciones (It
). Por lo tanto, no mutes a tus lugareños en tus afirmaciones. Y no dependas de las mutaciones de los locales en contextos base (si los usas).
[Subject(typeof(Whatever))]
public class When_doing_whatever
{
Establish context =() =>
{
// one of these for all your Its
};
Because of =() => _subject.DoWhatever();
It should_do_something;
It should_do_something_else;
}
Tuve el mismo problema y me acabas de dar la explicación correcta, ¡gracias! – Raffaeu
También puede señalar que '[ClassInitialize]' solo se ejecuta una vez por ejecución de prueba (antes del todo), por lo que puede usarse para cualquier rutina de configuración costosa. – kmote
-1: No deberías odiar tu pregunta; tiene mucho sentido, en realidad. Véase, por ejemplo, [xUnit.net] (https://github.com/xunit/xunit): recomienda usar el constructor como * el * inicializador de caso de prueba. Ser "solo una estructura proporcionada por el lenguaje" no es una cuestión menor; cualquiera que escriba cualquier tipo de marco (incluidos los marcos de prueba) * no * debe intentar reinventar la rueda, y usar en su lugar estándares bien definidos (como, ya sabes, usar constructores para inicializar cosas, etc.). – rsenna