私は、providerbaseクラスから継承するいくつかのプロバイダーをC#で作成してきました。ほとんどのモックフレームワークではインターフェイスのモックしか作成できないため、プロバイダーを使用するテストを作成するのは難しいことがわかりました。
プロバイダーベースから継承するプロバイダーへの呼び出しをモックする方法はありますか?
そうでない場合、プロバイダーのモックを実装するために使用できるパターンはありますか?
私は、providerbaseクラスから継承するいくつかのプロバイダーをC#で作成してきました。ほとんどのモックフレームワークではインターフェイスのモックしか作成できないため、プロバイダーを使用するテストを作成するのは難しいことがわかりました。
プロバイダーベースから継承するプロバイダーへの呼び出しをモックする方法はありますか?
そうでない場合、プロバイダーのモックを実装するために使用できるパターンはありますか?
モックフレームワークは、仮想メンバーを持っている限り、クラスに基づいてモックオブジェクトを作成できる必要があります。
Typemockもご覧ください。
Rhino モックでもクラスをモックできることは知っていますが、他のほとんどのモック フレームワークでもこれに問題はないはずです。
心に留めておくべきこと: クラスを封印することはできません。仮想をモックするメソッドをマークする必要があり、クラスには引数のないコンストラクターが必要です。これは保護できますが、プライベートは機能しません。(ちょうどこれを試してみました)
モッキング フレームワークは、クラスから継承してその型のオブジェクトを作成するクラスを作成するだけであることに注意してください。したがって、コンストラクターが呼び出されます。これにより、テストで予期しない動作が発生する可能性があります。
RhinoMocksまたはMoqは、クラスとインターフェイスのテスト ダブルを作成します。ただし、型には仮想メソッドがあるか、抽象的である必要があります。Typemockアイソレーターはこれを回避します 。
モックしたいオブジェクトはおそらく抽象的であることをお勧めします(依存性反転の原則)。