0

SOで、中間層を DataSet に配線する方法を尋ねる質問があります。

私が思いついたことを示す答えを出しましたが、密結合に満足していません. テストを始めたばかりで、コードの良い目標であることがわかりました。

単体テストを可能にするために、このコードをどのように分離しますか?

ありがとう、
キース

4

5 に答える 5

3

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

ああ、モックには RhinoMock を使用してある程度の成功を収めました。また、IoC ( http://www.castleproject.org/ )もご覧になることをお勧めします。

于 2008-10-14T07:34:53.227 に答える
1

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

James Kovacs と一緒にdnrTV のエピソード 126をご覧になることをお勧めします。

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

于 2008-10-28T18:45:29.960 に答える
0

Spring.netを試しましたか? これにより、コードがよりクリーンになり、結合が少なくなります。また、統合テストを行うための便利なクラスも提供します。

于 2008-09-30T14:37:00.383 に答える
0

何をテストするかによって異なります。

  • データベースからのデータ取得をテストしますか?
  • データセットからオブジェクトを構築していますか?
  • データベースへの挿入または更新?
  • 等々...

ここに提案があります:

オーダーには、そのすべての子が含まれます。これは集合体、全体です。リポジトリから詳細を含む注文を取得します。

var order = repository.GetOrderBy(id);

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

var dataset = orderDatabase.GetOrderAndDetailsBy(id);

リポジトリはビルダーを使用して注文を作成できます。

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);

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

var repository = new OrderRepository(orderDatabase, orderBuilder);

テストしたいものに応じて、偽のコラボレーターでリポジトリを作成できるようになりました。

于 2008-10-25T22:42:09.903 に答える
-2

エンティティ オブジェクトがある場合は、中間層の単体テストにモックを使用できます。

Rウェンディ

于 2008-09-30T14:32:55.713 に答える