C#GData YouTube APIで動作するサービスクラスを作成しました。 APIの一般的な使用方法は、YouTubeRequest
オブジェクトにリクエストを送信することです。このオブジェクトは、YouTube Webサービスを呼び出し、かなりの形式のデータを含むFeed
、Video
、またはのインスタンスでJSON形式のレスポンスを逆シリアル化しますC#のプロパティはほとんどありません。.NETのYouTube GData APIのオブジェクトをモック
私は、このサービスクラスのユニットテストしたいです。私のコードでは、YouTubeRequest
オブジェクトは外部依存関係であり、嘲笑される必要がありますが、インタフェースを実装していないため、自分自身の抽象レイヤーを追加する必要がありました。この層にはVideo
とPlaylist
の型を返すメソッドがあり、テストデータを持つダミーのVideo
インスタンスを作成するモックオブジェクトを作成するのにMoqを使用しようとしていますが、Video
クラスのプロパティの多くは読み込み専用ですが、これらのVideo
,、およびオブジェクトは作成が難しく、YouTubeフレームワークの他のタイプのインスタンスを必要とすることがよくあります。
私はユニットテストに非常に新しいですが、私はそれのロブConeryさんの動画を見てきたものから、ASP.NET Webフォームのような優しいユニットテストではありませんいくつかのフレームワークは、単にそこにあります。
この場合、どうすればよいですか? YouTubeRequest
オブジェクトを間違って抽象化していますか?この抽象レイヤーは非常にシンプルでなければなりませんが、マッピングレイヤーへの呼び出しを追加すると、データを自分のタイプにマッピングできます。私の型を返すインターフェイスを偽装するほうがはるかに簡単です。&プロパティを設定してダミーデータを簡単に作成することができます。 YouTubeとやりとりするコードは比較的少ないのですが、時間が経つにつれてサイズや複雑さが増し、単体テストを放棄するというアイデアは厄介です。プレゼンテーション、ビジネス、およびデータ:
実際に*模擬する必要がありますか、それともあなた自身でインスタンスを作成できますか?モーキングはサービスには意味がありますが、単純な* data *クラスを使用している場合は、インスタンスを自分で作成してください。 –
これをさらにラップして、抽象レイヤーを複雑にすることができます。代わりに、[impromptu-interface](http://code.google.com/p/impromptu-interface/)は、自分のクラスをあなたのインターフェースにダックタイプさせるかもしれません。私はまだそれを試していない。 – TrueWill
@ JonSkeetあなたはそれを嘲笑せずにインタフェースの偽の実装を書くことを意味しますか?はい、私はそれを行うことができますが、たとえ私が偽の実装を書いていたとしても、そのプロパティを設定できないと、この偽のバージョンがビデオオブジェクトとプレイリストオブジェクトにダミーデータを返すことができますか? YouTubeRequestオブジェクトを使用するサービスクラスは、返されるVideo、Playlist、Feedオブジェクトで動作します。これは、サービスクラスをテストするために偽造したいデータです。この問題は、ダミーのVideo、Playlist、およびFeedインスタンスを簡単に構築できないことと強く関連しています。 –