2011-08-05 6 views
0

私たちは次のような何かを我々のコードベースでいくつかの場所があります。モッキングSystem.Data.SqlClient.Xクラス

DataTable dt = new DataTable(); 
using (DatabaseContext context = DatabaseContext.GetContext(false)) { 
    IDbCommand cmd = context.CreateCommand("SELECT * FROM X"); 
    SqlDataAdapter dataAdapter = new SqlDataAdapter((SqlCommand)cmd); 
    dataAdapter.Fill(dt); 
} 
return dt; 

どのように我々はを削除するには部品番号のようなモックテストフレームワークを使用することができますがデータベースへの依存性をテストしますか?返されるDataTableをモックアップしたいと思います。

明確化:このコードを変更する計画がありますが、現時点では変更できません。それはまったく模擬することが可能ですか?

+0

MoqやRhinoのような無料のモックフレームワークを使用したい場合、このコードでデータテーブルをモックすることはできません。しかし、これを達成するためにTypemockやJustMockを調べることができます(しかし、これは高価なオプションです)。 – Raghu

答えて

1

コードを変更できないと思います。あなたは大きなリファクタリングを行うことはできません。ここに私が提案するものがあります。

  1. 抽出コードあなたはメソッドに提供しました。
  2. それはそれはそれは
  3. オーバーライドメソッド例
  4. ためOriginalClassNameTestingこの方法と名を含むクラスから保護または公衆
  5. 継承させるされていない場合
  6. それは仮想作成し、あなたがwan'tどんなDataTableを返す
  7. でテストではOriginalClassNameTestingクラスを使用します。

このパターンは「抽出と上書き」と呼ばれ、多くの書籍のうちの1つ - http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052です。

一部の人は、テスト用に仮想メソッドを追加しています。だから、これはちょうど最初のステップです。あなたはリファクタリングの計画があると言いました。そうすれば、何かを制動しなかったと確信できるように、テストを実施することが重要です。そしてJavaでは、すべてのメソッドがデフォルトで仮想です(または間違っていますか?)

2

私はRepositoryパターンを使用することをお勧めします。このパターンは、リポジトリ内のすべてのデータベース固有のコードを非表示にします。上のレイヤーでロジックをテストするために、リポジトリを模擬することができます。

データを取得し、 が モデルに作用するビジネスロジックからエンティティモデルにマップロジックを分離するためのリポジトリを使用してください。ビジネスロジックは、 がデータソースレイヤーを構成するデータの種類に依存しないようにする必要があります。たとえば、データソースレイヤー は、データベース、SharePointリスト、またはWebサービスです。

リポジトリは、アプリケーションのデータソースレイヤーとビジネスレイヤー( )を仲介します。データソースにデータを照会し、 はデータソースからのデータをビジネスエンティティーにマップし、ビジネスエンティティーの変更をデータソースに継続します。リポジトリ は、ビジネスロジックを基になる データソースまたはWebサービスとのやりとりから分離します。

+0

はい、できるだけ早くこれに移りたいと思っています。現在のところ、このコードを変更することはできませんが、そのまま模擬する方法はありますか?私は質問で明確にします。 –

関連する問題