2011-11-11 19 views
1

現在、Molesを使用して、サードパーティのライブラリとやり取りするいくつかのコードをテストしています。ライブラリは非常にうまくテストされていませんでした(それゆえモル数の必要性があります)。私が実行している問題は、抽象クラスを公開することだけです。具体的な実装は第三者図書館の内部にあります。Molesと内部クラス

私が直面している問題は、パブリックタイプのインスタンスを作成しようとしたときに、モル数から具体的なタイプを要求していますが、モルズはそれらが内部にあるためそれらのタイプのモールオブジェクトを生成しません。

molesのドキュメントの中で、内部を公開する方法は、AssemblyInfo.csファイルにInternalsVisibleTo属性を追加することです。しかし、これは私のアセンブリの内部を公開することです。これは、すでに作成されたアセンブリを持つ第三者図書館なので、私はそれらの内部構造を可視化して、それを使用できるようにする方法を知らないからです。

とにかく、これに関する助けは素晴らしいと思います。私は統合テストのために解決するが、それは唯一の解決策ですが、その時点に行く必要はありませんように願っています。

+0

テストでサードパーティライブラリのテストもカバーする必要がありますか? –

+0

いいえ私はサードパーティのライブラリを直接気にしません。これは、サードパーティのツールを利用して自分のコードをテストすることに気をつけるだけです。 – Mike

答えて

5

私が非常にうまく使用したアプローチは、モーション不能なサードパーティタイプのために自分のプロキシクラスをロールすることです。例えば。私は密封されたタイプThirdParty.Fooに依存したいと思っています/静的/インターフェイス/ etcがありません。代わりに、ThirdParty.Proxiesというライブラリを作成し、この新しいライブラリに具体的なタイプFooとインターフェイスIFooを追加します。インターフェイスIFooは、基になるThirdParty.Fooタイプから必要なすべてのメンバーに相当するメンバーを公開し、具体的なタイプThirdParty.Proxies.Fooは、基本的なサードパーティライブラリへのメソッド呼び出しを転送するだけで、これらのメンバーを実装します。 ThirdParty.Proxiesはユニットテストとコードカバレッジから除外されています。私の消耗しているアセンブリでは、私はThirdParty.Proxiesにのみ依存し、特に、私はIFooに依存します。こうすることで、この依存関係を簡単に模擬し、消費するアセンブリのコードカバレッジを100%達成することができます。

これはもう少し仕事ですが、Molesが動的に行うことと似ていますが、一度やり直すとどこでも再利用でき、Molesのオーバーヘッドが発生しないためユニットテストが高速になります。

+0

私もこの方法論を使用しました。それはあなたの問題を解決するために非常にうまくいきます。 –

+0

私はモルを完全に取り除くというアイデアが好きですが、その1つはプロキシクラス自体(アダプタであるため)は、統合テスト以外のテストではテストできないということです。私はあなたがあなたのカバレッジ計算にそのコードを含まないが、これまであなたのために問題があったと言いますか? – Mike

+0

我々は、プロキシアセンブリを除外することが許容できることを見出した。彼らは、一行の方法のフォワーダ以外で構成されている非常にシンプルなタイプであり、あなたが言うように、統合テストによって合理的なレベルのカバレッジがあることを確認することは良いことです。コードレビューでは、通常、小さなタイプミスや間違いがある場合もあります。あなたがプロキシーをいくつか書いたら、プロキシー型が密封されているか静的なものかによって、それらを書くための3つまたは4つの式があります。あなたは新しいものを追加することに非常に自信があります。実際、これまでのところ、私たちはプロキシタイプのバグを発見したことはありません。 –