2013-09-04 4 views
9

私は現在、Moqフレームワークを使用してユニットテストを作成し、依存関係をモックしています。Alter Mock <IType>オブジェクトの後に.Objectプロパティが呼び出されました

traceProviderMock.Setup(x => x.GetTracer(It.IsAny<string>())).Returns("tracer"); 

:私はもう少し私は再びモックオブジェクトにSetupを呼び出すモックの振る舞いを変更するにはしかし、後に

Mock<ITraceProvider> traceProviderMock = new Mock<ITraceProvider>(); 
traceProviderMock.Setup(x => x.GetTraceContext(It.IsAny<string>())).Returns("test"); 
ITraceProvider traceObj = traceProviderMock.Object; 

:これを行うことで、私はそうのようなモックを作成しました今度はtraceProviderMock.Objectと呼ぶことなく、新しい模擬行動はtraceObjに反映されますか?それが私の場合になりたいことです。

これは、Verify()メソッドでは間違いなく動作しますが、Setupメソッドでは表示されません。

私がこれをやりたい理由は、模擬依存関係を使ってTest Setupメソッドで完全な依存グラフを作ったからです。私はちょうど私の特定のテストのための嘲笑された依存の1つの振舞いを変えたいと思う。後続のテストでは、偽の依存関係に独自のスペシャライゼーションも適用されます。

+0

テストセットアップメソッドで 'GetTracer'メソッドが設定されていますか? –

+0

いいえ、特定のテスト方法でセットアップされています。それが理にかなっているのであれば、Mockに対するテスト固有の特殊化です。 –

+0

私はこれをテストし、それは私のために働いた。 'traceProviderMock'からオブジェクトを取得した後に' GetTracer'メソッドを設定し、期待値を返しました。アサーションが正しく設定されていることを確認してください。デバッガのコードをステップ実行することはできますか? –

答えて

14

この動作は、私が期待したとおりに実際に動作します。私のテストの問題のために、私は実際には新しく嘲笑されたメソッドを呼んでいませんでした。これは、嘲笑の枠組みが行動していないと信じて私を誤解させます。

要約すると、.Objectが呼び出され、変更が模擬オブジェクトインスタンスに反映された後で、モックを変更できます。

+0

Moqがこれを読むまで、Moqが正しい行動をしていなかった理由を不思議に思って、謙虚なパイを試してみてください。依存オブジェクトをチェックし、Mock.Objectを期待どおりに使用していないことが判明しました。 – Sully

関連する問題