Contexto compartido de xUnit mediante campos estáticos privados
¿Cuáles son las desventajas de un enfoque de compartir contexto mediante la creación de campos private static
?
public class MyTests3 : IDisposable
{
private static Mock<ILogger> _loggerMock = new Mock<ILogger>();
public void Dispose()
{
_loggerMock.Invocations.Clear();
}
[Fact]
public void Debug_OnInit_CalledOnce()
{
// arrange & act
_loggerMock.Object.Debug("first");
// assert
_loggerMock.Verify(l => l.Debug(It.IsAny<string>()), Times.Once);
}
[Fact]
public void Debug_OnExecute_CalledOnce()
{
// arrange & act
_loggerMock.Object.Debug("second");
// assert
_loggerMock.Verify(l => l.Debug(It.IsAny<string>()), Times.Once);
}
}
¿Debo llamar a Reset
para objetos de simulación después de que se haya completado la prueba?
davy.ai
Una de las principales desventajas de compartir contexto a través de campos estáticos privados es el potencial de contaminación cruzada en las pruebas. Si una prueba modifica el recurso compartido (en este caso, el mock del registro), puede afectar el resultado de otras pruebas que dependan de ese mismo recurso. Esto puede dificultar la depuración de las fallas en las pruebas y llevar a resultados de prueba poco confiables. Además, el uso de campos estáticos privados puede limitar la ejecución paralela de pruebas, ya que varias pruebas pueden intentar acceder y modificar el mismo recurso compartido simultáneamente.
En cuanto a restablecer los objetos simulados (mock), generalmente es una buena práctica hacerlo después de cada prueba para asegurar un nuevo inicio para la siguiente prueba. Esto se puede hacer utilizando el método
Reset()
en el objeto simulado o limpiando su lista de invocaciones, como se muestra en el métodoDispose()
en el código de ejemplo.