1

現在、Moles を使用して、サードパーティのライブラリとやり取りするコードをテストしています。ライブラリはテスト用にうまくセットアップされていませんでした (したがって、モグラが必要です)。具体的な実装は、サードパーティ ライブラリの内部にあります。

私が直面している問題は、パブリック型のインスタンスを作成しようとすると、モルから具象型が要求されますが、モルは内部であるため、これらの型のモル オブジェクトを生成しないことです。

モルのドキュメントの下で、内部を公開する方法は、AssemblyInfo.cs ファイルに InternalsVisibleTo 属性を追加することです。ただし、これは、モグラが使用できるようにアセンブリの内部を公開するためのものです。これらは既に作成されたアセンブリを含むサードパーティのライブラリであるため、モグラが使用できるようにこれらの内部を表示する方法がわかりません。

とにかく、これに関する助けは素晴らしいでしょう。それが唯一の解決策である統合テストで解決しますが、その点に行く必要がないことを願っています。

4

1 に答える 1

5

私が非常に成功裏に使用したアプローチは、モックできないサード パーティの型に対して独自のプロキシ クラスを展開することです。ThirdParty.Fooたとえば、封印されている/静的/インターフェースを持たないタイプなどに依存したい。代わりに、というライブラリを作成しThirdParty.Proxies、具象型FooとインターフェイスIFooをこの新しいライブラリに追加します。インターフェイスIFooは、基になる型から必要なすべてのメンバーと同等のメンバーを公開ThirdParty.Fooし、具象型ThirdParty.Proxies.Fooは、基になるサードパーティ ライブラリにメソッド呼び出しを転送する以外に何もせずに、これらのメンバーを実装します。ThirdParty.Proxies単体テストとコード カバレッジから除外されます。消費するアセンブリでは、依存関係のみを取得しますThirdParty.Proxies。具体的には、依存関係のみを取得しますIFoo. このようにして、この依存関係を簡単に模倣し、使用するアセンブリの 100% のコード カバレッジを達成できます。

これはもう少し作業が必要で、Moles が動的に行うのと似ていますが、一度完了すると、どこでも再利用でき、Moles のオーバーヘッドが発生しないため、単体テストが高速になります。

于 2011-11-11T22:53:51.173 に答える