MOQ要件?目的を打ち負かしますか?
-
28-10-2019 - |
質問
モックしたいすべてのプロパティアクセサを仮想化する必要はありません。
つまり、オブジェクトを変更して、モックしたいすべてのアクセザーを仮想化する必要がある場合、クラスを継承して自分でock笑することはできませんか?
解決
あなたの質問は非常に有効ですが、それについて考えると、クラスをock笑する他の方法はありません。インターフェイスを取得する場合、それは単なる契約であるため、モックフレームワークはあなたがそれを望む方法をockすることができますが、クラスを受講すると、すでにメンバーの実装があります。
したがって、モックフレームワークは、クラスメンバーを模倣できるようにするために、クラスから継承し、要求に応じてメンバーの行動をオーバーライドする必要があり、この目的のために仮想メンバーのみが機能します。
例えば。あなたが持っている場合(私は方法を示していますが、プロパティにも同じことが当てはまります)
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
's Bar()
一方、電話
foo.VirtualBar();
電話します MockFoo
's VirtualBar()
要求されているように、模擬フレームワークによって動作が注入される仮想メンバーであるためです。
所属していません StackOverflow