Erweiterungsmethoden mit Moq verspotten: Eine vollständige Anleitung
Das Testen von Code, der auf Erweiterungsmethoden basiert, kann besondere Herausforderungen mit sich bringen, insbesondere wenn Sie sicherstellen möchten, dass zukünftige Fehler dieser Erweiterungsmethoden Ihre Tests nicht beeinträchtigen. Während Moq das Überschreiben statischer Methoden (wie sie beispielsweise in Erweiterungsmethoden verwendet werden) nicht direkt unterstützt, gibt es eine clevere Problemumgehung, um in dieser Situation Mocking zu erreichen.
Im Gegensatz zu Instanzmethoden können statische Methoden nicht überschrieben oder ausgeblendet werden. Die Hauptfunktion von Moq besteht darin, Scheininstanzen von Objekten zu erstellen, was die Ausrichtung auf statische Methoden im Wesentlichen ausschließt.
Der Trick beim Spotten von Erweiterungsmethoden besteht darin, zu erkennen, dass es sich im Wesentlichen nur um statische Methoden handelt, die als Instanzmethoden getarnt sind. Dazu benötigen wir:
Hier ist ein Beispiel dafür, wie das funktioniert:
<code class="language-csharp">// 在实用程序类中定义扩展方法 public static class Utility { public static SomeType GetFirstWithId(this List<SomeType> list, int id) { return list.FirstOrDefault(st => st.Id == id); } } // 创建实用程序类的模拟实例 var mockUtility = new Mock<Utility>(); // 配置模拟以返回我们想要的结果 mockUtility.Setup(u => u.GetFirstWithId(It.IsAny<List<SomeType>>(), 5)).Returns(new SomeType { Id = 5 }); // 设置测试 var listMock = new Mock<List<SomeType>>(); listMock.Setup(l => l.Count).Returns(0); // 此示例中列表中没有实际项目 // 测试的断言 Assert.That(listMock.Object.GetFirstWithId(5), Is.Not.Null);</code>
Indem wir die Erweiterungsmethoden in eine statische Dienstprogrammklasse verschieben und die Klasse selbst verspotten, überwinden wir effektiv die Einschränkung, statische Erweiterungsmethoden nicht direkt überschreiben zu können. Diese Problemumgehung stellt sicher, dass Ihre Tests robust bleiben, auch wenn zukünftige Erweiterungsmethoden fehlschlagen.
Das obige ist der detaillierte Inhalt vonWie kann man Erweiterungsmethoden mithilfe von Moq effektiv verspotten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!