質問

コードジェネレーター(.NetTiersを使用したCodeSmithテンプレート)を使用して、すべてのDALコードを生成します。コード(ビジネスレイヤー)の単体テストを作成しますが、これらのテストの実行はかなり遅くなっています。問題は、テストごとに、データベースをリセットしてクリーンな状態にすることです。また、私は多くのテストを行っているため、データベース操作の遅延が合計するとかなりの遅延になるようです。

すべてのDB操作は、.NetTiersによって生成される DataRepository クラスを介して実行されます。データベースを使用する代わりにメモリ内ストレージを使用するmock-DataRepositoryを生成する(または自分でコーディングする)方法があるかどうか知っていますか?

こうすることで、実際に現在のコードに何も変更せずに、この模擬リポジトリを単体テストで使用して、大幅に高速化できます!

役に立ちましたか?

解決

依存性注入(DI)および制御コンテナーの反転(IOC)を見てください。基本的に、新しいモックDBオブジェクトが実装できるインターフェースを作成し、テストを実行するときにDIフレームワークがモックDBを注入し、アプリを実行するときに実際のDBを注入します。

あなたを助けるために使用できる無料のオープンソースライブラリが数多くあります。 C#を使用しているため、新しくて今後のDIライブラリの1つは Ninject です。他にもたくさんあります。このウィキペディアの記事で他の人と詳細な説明をご覧ください。

他のヒント

問題の説明から、テストはビジネス、DAL、およびライブデータベースを使用しているため、統合テストを実行していると思います。

単体テストでは、モックまたはスタブ化された他のすべての依存関係を持つ1つのコード層を扱います。このアプローチを使用すると、増分コードの変更ごとにユニットテストを非常に高速に実行できます。

いくつかの例を挙げると、Rhino Mock、Moq、typemockなど、使用できるさまざまなモックフレームワークがあります。 (私のプロジェクトでは、Rhinoモックを使用してDALレイヤーをモックし、分離のビジネスレイヤーを単体テストします)

ハーシャ

単体テストの一部では、データベースからモックするためにデータベースから生成されたXMLから取得したデータを使用します。 DALクラスはすべてDIコンテナに格納されているため、モッククラスに置き換えられます。

xmlの生成はカスタムコードです。このためのオープンソースソリューションが見つかったら、喜んでそれを聞きます。

Stefanの回答後に編集:テストデータベースに SQL CE を使用している別のチームを思い出します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top