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 中国語 Web サイトの他の関連記事を参照してください。