Comenzando con moq

Instalación o Configuración

  1. Seleccione el proyecto al que desea agregar la referencia a Moq.
  2. Abra Nuget para este proyecto.
  3. Seleccione “Examinar” y luego escriba “moq” en el cuadro de búsqueda.
  4. Seleccione “Moq” y haga clic en Instalar.

ingrese la descripción de la imagen aquí

Siguiendo estos pasos, se instalará el paquete Moq y se le agregará una referencia en las referencias del proyecto seleccionado. Después de completar estos pasos, Moq se puede usar en el proyecto de prueba unitaria simplemente declarándolo en los archivos de clases de prueba:

Using Moq;

Moqs son dobles de prueba

Los simulacros están pensados ​​como dobles de prueba, que permiten validar las interacciones con los simulacros, no están destinados a reemplazar el sistema que está probando. Los ejemplos a menudo demostrarán las características de Moq de la siguiente manera:

// Create the mock
var mock = new Mock<IMockTarget>();

// Configure the mock to do something
mock.SetupGet(x => x.PropertyToMock).Returns("FixedValue");

// Demonstrate that the configuration works
Assert.AreEqual("FixedValue", mock.Object.PropertyToMock);

// Verify that the mock was invoked
mock.VerifyGet(x => x.PropertyToMock);

Si bien este ejemplo muestra los pasos necesarios para usar el simulacro, es importante recordar que en realidad no prueba nada, aparte de que el simulacro se ha configurado y utilizado correctamente. Una prueba real que utiliza un simulacro proporcionará el simulacro al sistema que se va a probar. Para probar el siguiente método:

public class ClassToTest
{
    public string GetPrefixedValue(IMockTarget provider)
    {
        return "Prefixed:" + provider.PropertyToMock;
    }
}

Es posible crear una simulación de la interfaz dependiente:

public interface IMockTarget
{
    string PropertyToMock { get; }
}

Para crear una prueba que realmente valide el comportamiento del método GetPrefixedValue:

// Create and configure the mock to return a known value for the property
var mock = new Mock<IMockTarget>();
mock.SetupGet(x => x.PropertyToMock).Returns("FixedValue");

// Create an instance of the class to test
var sut = new ClassToTest();

// Invoke the method to test, supplying the mocked instance
var actualValue = sut.GetPrefixedValue(mock.Object);

// Validate that the calculated value is correct
Assert.AreEqual("Prefixed:FixedValue", actualValue);

// Depending on what your method does, the mock can then be interrogated to
// validate that the property getter was called.  In this instance, it's
// unnecessary since we're validating it via the calculated value.
mock.VerifyGet(x => x.PropertyToMock);