2008-09-30 3 views
0

SOに、中間層をデータセットに配線する方法を質問しました。ユニットテストを可能にするために中間層とデータセットをどのようにデカップリングするのですか?

私は何を思いついたのかを示す答えを出しましたが、タイトなカップリングには満足できません。私はちょうどテストに入り始め、私のコードのためにそれを良い目標にしています。

このコードはユニットテストを可能にするためにどのように分離されますか?

を使用すると、エンティティオブジェクトを持っている場合、あなたは中間層のテストユニットのためのモックを使用することができ、
キース

答えて

3

IMO;データセットは悪いです。オフラインデータベースであり、オフラインデータベースとしてのみ使用する必要があります。何もない、IMO。しかし、データアクセスレイヤ(DAL)で行うことは、ビジネスレイヤ(BL)に実際に影響を与えてはいけません。私はちょうどそれら(IList)間のオブジェクト(インターフェイスを使用する)を使用して、あなたのDAL(IRepository)を定義するインターフェイスを使用し、あなたはユニットテストのためにあなたのBLに必要なものを返すためにそのインターフェイスを模擬することができます。ユニットテストのデータセットはもう一つの獣です。決して試したことはありません。うまくいけないでしょう...おそらくメモリ内のデータベースがあなたの最善の策です...

ああ、嘲笑用です。私はRhinoMock 。また、IoC(http://www.castleproject.org/)を見ることをお勧めします。

+0

私は同意します。私は現在、NHibernate、Castle Windsor、RhinoMockを使用するアプリケーションを持っており、とても幸せです。 私はリポジトリパターンを使用しており、私の単体テストでDALからほぼ完全に切り離しています。 データセットにもう一度戻ることは決してありません – Tigraine

0

あなたはSpring.netを試みたことがありますか?あなたのコードはより洗練されたものになります。また、統合テストを行うためにuseful classesも提供しています。

0

それはあなたがテストしたいものに依存:あなたは、データベースからのデータ検索をテストするために

  • したいですか?
  • データセットからオブジェクトを作成しますか?
  • データベースへの挿入または更新?
  • のように...

ここで提案です:

ためにはそのすべての子が含まれています。これは集合全体です。あなたは、リポジトリから詳細を順番に取得 :

var order = repository.GetOrderBy(id); 

リポジトリは、データベースからデータを取得します。

var dataset = orderDatabase.GetOrderAndDetailsBy(id); 

リポジトリが注文を作成するビルダーを使用することができます。

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset); 

次のようにリポジトリを作成する必要があります。

var repository = new OrderRepository(orderDatabase, orderBuilder); 

これで、テストする内容に応じて、偽の共同編集者を使ってリポジトリを作成できます。

1

IOC(制御反転)とモックオブジェクトが必要です。

dnrTV episode 126をJames Kovacsと一緒に視聴することをおすすめします。

彼はあなたが探しているものを正確に示しています。

関連する問題