SOで、中間層を DataSet に配線する方法を尋ねる質問があります。
私が思いついたことを示す答えを出しましたが、密結合に満足していません. テストを始めたばかりで、コードの良い目標であることがわかりました。
単体テストを可能にするために、このコードをどのように分離しますか?
ありがとう、
キース
SOで、中間層を DataSet に配線する方法を尋ねる質問があります。
私が思いついたことを示す答えを出しましたが、密結合に満足していません. テストを始めたばかりで、コードの良い目標であることがわかりました。
単体テストを可能にするために、このコードをどのように分離しますか?
ありがとう、
キース
IMO; DataSet は悪です。これらはオフライン データベースであり、オフライン データベースとしてのみ使用する必要があります。もう何もない、IMO。ただし、データ アクセス レイヤー (DAL) で行うことは、実際にはビジネス レイヤー (BL) に影響を与えるべきではありません。それらの間でオブジェクト(インターフェイスを使用)を使用するだけで(IList)、インターフェイスを使用してDAL(IRepository)を定義し、そのインターフェイスをモックして、単体テストのためにBLで必要なものを返すことができます。単体テスト データセットは別の野獣です。試したことはありません。できれば試す必要もありません。おそらく、メモリ内データベースが最善の策です...
ああ、モックには RhinoMock を使用してある程度の成功を収めました。また、IoC ( http://www.castleproject.org/ )もご覧になることをお勧めします。
IOC (制御の反転) とモック オブジェクトが必要です。
James Kovacs と一緒にdnrTV のエピソード 126をご覧になることをお勧めします。
彼はあなたが探しているものを正確に示しています。
Spring.netを試しましたか? これにより、コードがよりクリーンになり、結合が少なくなります。また、統合テストを行うための便利なクラスも提供します。
何をテストするかによって異なります。
ここに提案があります:
オーダーには、そのすべての子が含まれます。これは集合体、全体です。リポジトリから詳細を含む注文を取得します。
var order = repository.GetOrderBy(id);
リポジトリはデータベースからデータを取得します。
var dataset = orderDatabase.GetOrderAndDetailsBy(id);
リポジトリはビルダーを使用して注文を作成できます。
var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);
次のようにリポジトリを作成する必要があります。
var repository = new OrderRepository(orderDatabase, orderBuilder);
テストしたいものに応じて、偽のコラボレーターでリポジトリを作成できるようになりました。
エンティティ オブジェクトがある場合は、中間層の単体テストにモックを使用できます。