モックしたいすべてのプロパティアクセサーを仮想化する必要はありませんか?
つまり、オブジェクトを変更して、モックしたいすべてのアクセサーを仮想化する必要がある場合、クラスを継承して自分でモックすることはできませんか?
モックしたいすべてのプロパティアクセサーを仮想化する必要はありませんか?
つまり、オブジェクトを変更して、モックしたいすべてのアクセサーを仮想化する必要がある場合、クラスを継承して自分でモックすることはできませんか?
あなたの質問は非常に有効ですが、考えてみると、クラスをモックする方法は他にありません。インターフェイスを使用する場合、それは単なるコントラクトであるため、モック フレームワークは好きなようにモックできますが、クラスを使用する場合は、そのメンバーの実装が既にあります。
したがって、モック フレームワークは、クラス メンバーをモックできるようにするために、クラスから継承し、要求に応じてメンバーの動作をオーバーライドする必要があります。この目的のためには、仮想メンバーのみが機能します。
たとえば。あなたが持っている場合(私はメソッドを示していますが、同じことがプロパティにも当てはまります)
class Foo
{
public void Bar()
{
}
public virtual void virtualBar()
{
}
}
モックフレームワークはおそらくこのようなものを作成してモックします
public class MockFoo : Foo
{
public override void virtualBar()
{
// mockery action
}
public new void Bar()
{
// mockery action
}
}
今、あなたが持っているとき
Foo foo = GetMockObject(); // you get an instance of MockFoo
今あなたが電話するとき
foo.Bar();
実際の実装を呼び出すつもりはありませんが、非仮想メンバーであるため、のを呼び出しFoo
ますBar()
一方、呼び出し
foo.VirtualBar();
は、要求に応じてモック フレームワークによって動作が注入される仮想メンバーであるため、を呼び出しますMockFoo
。VirtualBar()