unit-testing Usando un marco de burla para validar el comportamiento


Ejemplo

Las simulaciones se utilizan cuando es necesario verificar las interacciones entre el sistema sometido a prueba y la prueba de dobles. Se debe tener cuidado para evitar crear pruebas demasiado frágiles, pero la burla puede ser particularmente útil cuando el método para probar es simplemente organizar otras llamadas.

Esta prueba verifica que cuando se llama al método bajo prueba ( ProcessRecord ), se llama al método de servicio ( UseValue ) para el Record donde Flag==true . Para ello, configura un apéndice con datos enlatados:

var stub = new Mock<IRecordProvider>();
stub.Setup(provider => provider.GetRecords()).Returns(new List<Record> {
    new Record { Id = 1, Flag=false, Value="First" },
    new Record { Id = 2, Flag=true, Value="Second" },
    new Record { Id = 3, Flag=false, Value="Third" }
});

Luego configura un simulacro que implementa la interfaz IService :

var mockService = new Mock<IService>();
mockService.Setup(service => service.UseValue(It.IsAny<string>())).Returns(true);

Luego se suministran al sistema bajo prueba y se llama al método a probar.

var sut = new SystemUnderTest(mockService.Object);

var processed = sut.ProcessRecord(stub.Object);

El simulacro puede ser interrogado para verificar que se haya realizado la llamada esperada. En este caso, una llamada a UseValue , con un parámetro "Segundo", que es el valor del registro donde Flag==true .

mockService.Verify(service => service.UseValue("Second"));