使用 Moq 模擬擴充法:一種替代方法
在測試依賴擴展方法的程式碼時,保持測試穩定性以應對這些方法未來可能出現的故障至關重要。雖然 Moq 的功能不能直接擴展到覆蓋靜態方法,但存在一種變通方法。
替代方法
擴展方法本質上是靜態方法,Moq 無法直接模擬。相反,您可以透過利用特定的類別及其靜態方法來隔離擴充方法的實作。
考慮以下範例:
<code class="language-c#">public static class ExtensionClass { public static int GetValue(this SomeType obj) => obj.Id; } public class SomeType { public int Id { get; set; } }</code>
測試實作
要建立不呼叫擴充方法的模擬,請直接引用靜態類別:
<code class="language-c#">var concreteClassMock = new Mock<ExtensionClass>(); concreteClassMock.Setup(c => c.GetValue(It.IsAny<SomeType>())).Returns(5);</code>
透過定位特定類別的靜態方法,您可以有效地模擬擴充方法的行為,而無需直接依賴擴充方法本身。這確保了測試失敗僅源自於被測類,而不是擴展方法未來可能出現的故障。
以上是如何使用 Moq 有效模擬擴充方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!