moqAan de slag met moq


Opmerkingen

Moq is een bespotbibliotheek voor .Net. Hiermee kunnen interacties met afhankelijkheden worden gesimuleerd en geverifieerd om het testen van eenheden te vergemakkelijken.

Release-opmerkingen voor verschillende versies van Moq zijn hier te vinden.

Installatie of instellingen

  1. Selecteer het project waaraan u de referentie wilt toevoegen aan Moq.
  2. Open Nuget voor dit project.
  3. Selecteer "Bladeren" en typ "moq" in het zoekvak.
  4. Selecteer "Moq" en klik vervolgens op Installeren.

voer hier de afbeeldingsbeschrijving in

Volg deze stappen om het Moq-pakket te installeren en er een verwijzing naar toe te voegen in de geselecteerde projectreferenties. Na het voltooien van deze stappen kan Moq worden gebruikt in het unit-testproject door het eenvoudigweg aan te geven in de testklassenbestanden:

Using Moq;
 

Moq's zijn testdubbels

Mocks zijn bedoeld als testdubbels, waarmee interacties met de mocks kunnen worden gevalideerd, ze zijn niet bedoeld als vervanging van het systeem dat u test. Voorbeelden laten vaak kenmerken van Moq als volgt zien:

// 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);
 

Hoewel dit voorbeeld de stappen toont die nodig zijn om de mock te gebruiken, is het belangrijk om te onthouden dat hij eigenlijk niets test, behalve dat de mock correct is ingesteld en gebruikt. Een echte test die gebruik maakt van een mock zal de mock leveren aan het te testen systeem. Om de volgende methode te testen:

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

Het is mogelijk om een mock van de afhankelijke interface te maken:

public interface IMockTarget
{
    string PropertyToMock { get; }
}
 

Een test maken die het gedrag van de methode GetPrefixedValue daadwerkelijk valideert:

// 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);