2013-09-30 12 views
6

いくつかのクラスの単体テストを書きたいと思います。私のクラスの中には、ファイルシステムを使用し、模擬するインターフェースを持たない第三者のライブラリに依存するものがあります。サードパーティのライブラリにインターフェイスを実装する戦略?

私のコードは実際にはそのコードの結果だけに関係しているので、私はファイルシステムへの依存関係を避けるためにクラスを嘲笑したいと思います。

初期ライブラリを変更せずに、ライブラリの具体的なクラスを模擬するのに最適な方法は何ですか?

私はインターフェイスを実装し、初期ライブラリのオブジェクトを含むラッパーオブジェクトを作成するかもしれないと思っています。しかし、私はこの道を始める前に、より良い方法がないか確かめたいと思っています。

また、この場合、TypeMockのようなツールはMoqよりも適していますか?

+0

私はかなり理解しています - あなたがライブラリをテストしたいのであれば、なぜそれを嘲笑しますか? – GarethOwen

+0

申し訳ありませんが、悪い言い訳 - これをあまりにも速く書きました。私は編集します:今、モバイルで。基本的には、自分のコードのテストでライブラリを使用したいが、ファイルシステムを使用することを意味する。私はテストをより速く/より堅牢にするためにそれを嘲笑したいと思います。 – SeanKilleen

+0

が分かります。したがって、ライブラリはfileSystemに依存しており、それを '模擬'ファイルシステムで置き換えることができます。いい質問です。 – GarethOwen

答えて

10

背景:

それは.NETフレームワークのような安定したライブラリ/フレームワークのない限り、私はそれから私のコードを分離することを好みます。つまり、私は図書館が私のシステムに依存するのではなく、そのシステムに依存するようにしたい。

編集、再編集:「安定した」ライブラリを使用していると考えられます。しかし、それは "外部"システム(ファイルシステム)とやりとりするので、私はおそらくそれから私のシステムを切り離したいと思うでしょう。

これを達成するために、ライブラリのアダプタ/ラッパーを作成します。インタフェースには、私のシステムがライブラリに持たせたいメソッドがあり、ライブラリが提供するメソッドはありません。インタフェースは私のシステムが所有する型を使用し、ライブラリの型は使用しません。アダプターは必要な変換を行います。

これは、私がライブラリを模擬/スタブ/偽装したいかどうかにかかわらず、心配の良い分離を提供し、ライブラリの変更からシステムを保護するためです。あなたの質問へ

回答:

アダプタ/ラッパーがあったら、それはそれあなたのテストで偽に簡単です。アダプターはシステムの言語を使用するため、読みやすく理解しやすいテストを書くのが簡単になります。

擬似フレームワークを使用するのか、アダプテーターのための独自の偽物を書くのかは、味わいの問題です。

+0

私にはうれしいよ – GarethOwen

+2

このルートに行く場合は、何らかの方法でラッパーをテストする必要があります。ラッパーの単体テストは、いかにシンプルにできるかによっては過剰なものになるかもしれませんが、実際には統合テストに実際の実装(モックではありません)を含める必要があります。 –

関連する問題