2012-07-09 5 views
11

単体テストでは、NUnit 2.6とMoq 4.0を使用しています。 Moqのプロキシオブジェクトが(おそらく設計によって)実際の実装へのメソッド呼び出しをリレーしない仮想メンバーに関する特別なケースがあります。例えば、私はクラスを持っていた場合...Moqの仮想メンバーを模擬する

public class MyClass { 
    protected virtual void A() { 
     /* ... */ 
    } 

    protected virtual void B(...) { 
     /* ... */ 
    } 
} 

...と私は私のテスト・フィクスチャでGetSomethingElseA()メソッドをオーバーライドする部品番号を使用して...

var mock = new Mock<MyClass>(); 
mock.Protected().Setup("A").Callback(SomeSortOfCallback); 

...使用モックのAメソッドは素晴らしく機能します。しかし、メソッド内の何かがnot-mockedメソッドBを呼び出す場合、実際の実装がMyClassに存在する場合でも、このメソッドは何もせず、デフォルト値を返します。

これを回避する方法はありますか? Moqを間違って使用していますか?事前に

おかげで、
マニー

答えて

17

mock.CallBase = trueを設定し、あなたが行くように良いことがあります。

+0

他の方法を模擬したい場合はどうすればよいですか? –

+1

@LouisRhysこれがそれを妨げないことを確かめてください。あなたが明示的に何かを模倣すれば、 'CallBase'の設定は決してうまくいかないでしょう。 –

-1
var systemUnderTest = new Moq.Mock<ProcessBulkData> { CallBase = true }; 
systemUnderTest.Setup(s => s.MethodName(...)).Returns(...); 
var actual=systemUnderTest.Object.BulkInsert(...); 
+3

答えと一緒にコードの説明を追加する方がよいでしょう。 – EJoshuaS

関連する問題