2009-04-29 6 views
0

すべてのDALコードを生成するコードジェネレータ(CodeSmith with .NetTiersテンプレート)を使用します。私は自分のコード(ビジネス層)の単体テストを書いており、これらのテストはかなり遅くなっています。問題は、各テストでデータベースをクリーンな状態にリセットすることです。また、私は多くのテストを行うので、データベース操作の待ち時間はかなり遅れているようです。生成されたDALコードによるユニットテスト

すべてのDB操作は、.NetTiersによって生成されたDataRepositoryクラスを通じて実行されます。データベースを使用する代わりにメモリ内の記憶域を使用するモックDataRepositoryを生成(またはコード化)する方法があるかどうか知っていますか?

このようにして、私は単体テストでこのモックリポジトリを使用することができます。

答えて

3

そのテスト・データベースのSQL CEを使用して別のチームを思い出す依存性注入(DI)を見て、コントロールコンテナの反転(IOC)。基本的には、新しいモックDBオブジェクトが実装できるインターフェイスを作成し、テスト実行時にDIフレームワークがあなたのモックDBを挿入し、アプリケーションを実行するときに実際のDBを挿入します。

多くの無料のオープンソースライブラリがあり、あなたを助けることができます。あなたがC#にいるので、新しく登場するDIライブラリの1つはNinjectです。他にも多くのものがあります。他の人と高いレベルの説明についてはWikipedia articleをご覧ください。

0

ユニットテストの中には、データベースから生成されたXMLからフェッチされたデータを使用して、データベースアクセスを模擬するものがあります。 DALクラスはすべてDIコンテナに格納されているため、模擬クラスで置き換えられます。

xmlの世代はカスタムコードですが、これについてオープンソースのソリューションが見つかったら、私はそれを聞いてうれしいです。ステファンの答えの後

編集:私は

1

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

単体テストでは、他のすべての依存関係をモックしたりスタブしたりして、コードの1つの層を処理します。このアプローチでは、単体テストはすべてのインクリメンタルコードの変更で実行するのが本当に速くなります。

Rhino Mock、Moq、typemockなどのように使用できる様々な模擬フレームワークがいくつかあります。 (私のプロジェクトでは、Rhinoモックを使ってDALレイヤーとユニットテストビジネスレイヤーを分離しています)

Harsha

関連する問題