7

(適切な設計上の理由から) DbConnections を必要とするいくつかの .NET クラスを単体テストしようとしています。これらのテストでは、これらのクラスへの入力として提供する特定のデータがメモリ内にあります。

そのメモリ内データは、DataTable (またはその DataTable を含む DataSet) として簡単に表現できますが、別のクラスの方が適している場合は、それを使用できます。

何らかの方法で、メモリ内データへの接続を表す DbConnection を魔法のように取得できた場合、オブジェクトを構築し、それらにメモリ内データに対してクエリを実行させ、それらの出力が期待どおりであることを確認できます。 メモリ内データへの DbConnection を取得する方法はありますか? これを実現するために追加のサードパーティ製ソフトウェアをインストールする自由はありません。理想的には、テスト中にディスクに触れたくありません。

4

3 に答える 3

7

DbConnection を消費するのではなく、IDbConnection を消費してモックできますか? 似たようなことを行い、モックに DataSet を渡します。DataSet.CreateDataReader は、DbDataReader を継承する DataTableReader を返します。

DbDataReader と同じインターフェイスを実装するクラスを返す ExecuteReader() メソッドを追加した独自の IDbConnection のようなインターフェイスで DbConnection をラップしました。私たちのモックでは、ExecuteReader は DataSet.CreateDataReader が提供するものを単に返します。

回りくどいように聞こえますが、おそらく多くの結果セットを含む DataSet を構築するのは非常に便利です。結果を表すストアド プロシージャにちなんで DataTables に名前を付けます。 IDbConnection モックは、クライアントが呼び出しているプロシージャに基づいて適切な Datatable を取得します。DataTable も CreateDataReader を実装しているので、準備完了です。

于 2009-03-26T11:58:58.733 に答える
1

TypeMock? (ただし、「インストール」する必要があります)。

Data* がテスト用の適切なフックを提供できると仮定して注意してください。これは一般的にかなり最悪のケースです。しかし、あなたはグッドデザインの理由を言っているので、それはすべてカバーされていると確信しています:D

于 2009-03-26T11:44:01.000 に答える