moq Tutorial
Erste Schritte mit moq
Suche…
Bemerkungen
Moq ist eine spöttische Bibliothek für .Net. Damit können Interaktionen mit Abhängigkeiten simuliert und verifiziert werden, um das Testen von Einheiten zu erleichtern.
Versionshinweise für verschiedene Versionen von Moq finden Sie hier .
Installation oder Setup
- Wählen Sie das Projekt aus, zu dem Sie die Referenz zu Moq hinzufügen möchten.
- Öffne Nuget für dieses Projekt.
- Wählen Sie "Durchsuchen" und geben Sie im Suchfeld "moq" ein.
- Wählen Sie "Moq" und klicken Sie dann auf Installieren.
Wenn Sie diese Schritte ausführen, wird das Moq-Paket installiert und in den ausgewählten Projektverweisen ein Verweis hinzugefügt. Nach Abschluss dieser Schritte kann Moq im Komponententestprojekt verwendet werden, indem es einfach in den Testklassendateien deklariert wird:
Using Moq;
Moqs sind Testverdopplungen
Mocks sind als Testverdopplungen gedacht, die die Validierung der Interaktionen mit den Mocks ermöglichen. Sie sollen das getestete System nicht ersetzen. Beispiele zeigen häufig die folgenden Merkmale von Moq:
// 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);
Während dieses Beispiel die Schritte zeigt, die mit der Verwendung des Modells verbunden sind, ist es wichtig zu wissen, dass es tatsächlich nichts testet, außer dass das Modell richtig eingerichtet und verwendet wurde. Ein tatsächlicher Test, der ein Mock verwendet, liefert das Mock an das System, das getestet werden soll. So testen Sie die folgende Methode:
public class ClassToTest
{
public string GetPrefixedValue(IMockTarget provider)
{
return "Prefixed:" + provider.PropertyToMock;
}
}
Es ist möglich, ein Modell der abhängigen Schnittstelle zu erstellen:
public interface IMockTarget
{
string PropertyToMock { get; }
}
So erstellen Sie einen Test, der das Verhalten der GetPrefixedValue
Methode tatsächlich 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);