生成されたDALコードを使用した単体テスト
-
03-07-2019 - |
質問
コードジェネレーター(.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 を使用している別のチームを思い出します