es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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étodo Dispose() en el código de ejemplo.

Comments are closed.