[解決済み] MOQ - 別のインターフェースにキャストする必要があるインターフェースをどのようにモックするか?
質問
I1 のモックを作成したいのですが、これは問題ありません。しかし、このモックを使用するメソッドをテストする過程で、I1 にはないいくつかのプロパティにアクセスするために、I2 にキャストする必要があります。
Interface I1
{ int AProperty{get;set;}}
Interface I2
{int AnotherProperty{get;set;}}
次に、いくつかのオブジェクトを用意します。
Class O1 : I1 {}
と
Class O2 : O1 , I2 {}
問題は、I2 実装オブジェクトのインスタンスを持っているとき、そのインターフェイスを通して実装されているメソッドにアクセスするために、それを I1 にキャストすることができることです。コード上では、これは問題ではなく、すべてが期待通りに動作します。
唯一の問題は、そのクラスでユニットテストを書くときに起こります。
インターフェースはGetNewInstanceというメソッドも公開しており、これはIGetNewInstanceインターフェースにキャストした実装オブジェクトの初期化されたインスタンスを返します...私は通常これをうまくモックしてそれ自身を返すようにできます(それで私はモックオブジェクトで作業を続けることができます)。
しかし、I2 型のこの返されたオブジェクトを I1 にキャストしようとすると、NULL 参照が返されます。これは、I2 を実装するモック オブジェクトが I1 を継承するものから継承しないので、理にかなっています。
問題は、モックオブジェクトが I1 と I2 の両方を同時に継承するように強制するにはどうすればよいかということです。
どのように解決するのですか?
私の理解では、あなたは2つのインターフェイスを実装したモックを作りたいのですね。Moqを使えば、それはこのように簡単にできます。
var mock = new Mock<IFoo>(); // Creates a mock from IFoo
mock.As<IBar>(); // Adds IBar to the mock
mock.As<IBar>().Setup(m => m.BarMethod()).Returns(new object()); // For setups.
さて、期待値を設定し、モックを使うことができます。
IFoo
と
IBar
.
あなたの
GetNewInstance
メソッドに、モック自身を返す期待値を設定すればよいのです。
関連
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み] C++でインターフェイスを宣言するには?
-
[解決済み] コンストラクタのシグネチャを定義するインターフェース?
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み] Moqでメソッドが呼び出されていないことを確認する方法は?
-
[解決済み】「インターフェースに合わせたプログラム」とはどういう意味ですか?
-
[解決済み】Moqを使用してユニットテストの非同期メソッドをモック化する
-
[解決済み] ユニットテストはゲッターとセッターのために書くべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] mockitoのwhen()呼び出しはどのように動作するのですか?
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み】ユニットテストと機能テストの違いは何ですか?
-
[解決済み】ユニットテスト初心者、優れたテストを書くには?[クローズド]
-
[解決済み] 既存のプロダクションプロジェクトにユニットテストをうまく追加することができますか?もしそうなら、どのように、そして、それは価値があるのでしょうか?
-
[解決済み] RSpec vs Cucumber (RSpecの話) [終了しました。]
-
[解決済み] 単体テスト?統合テスト? 回帰テスト? 受入テスト?
-
[解決済み] JUnit を使ってサーブレットをテストする方法
-
[解決済み] 良いユニットテストとは?[クローズド]
-
[解決済み] Githubでテストの成功/失敗を表示するには?