3

現在、PostgreSQL を多用するアプリケーションを開発しています。ほとんどの場合、SQLAlchemy を使用してデータベースにアクセスしますが、これは非常にうまく機能します。テストのために、関連するオブジェクトをモックするか、データベースにアクセスせずに使用できます。ただし、非標準のクエリを実行するシステムの一部があります。これらのサブシステムは、一時テーブルを作成し、膨大な数の行を挿入してから、データをメイン テーブルにマージする必要があります。

現在、これらのサブシステムにはいくつかの SQL ステートメントがありますが、これにより、関連するクラスがデータベースと密接に結合され、単体テストが難しくなります。

基本的に私の質問は、この問題を解決するための設計パターンはありますか? 私が思いついた唯一のことは、これらの SQL ステートメントを別のクラスに入れ、インスタンスを他のクラスに渡すことです。このようにして、単体テスト用にクエリ クラスをモックできますが、それでも少しぎこちなく感じます。これを行うより良い方法はありますか?

4

1 に答える 1

0

それで、もう少し遊んだ後、私は今、中途半端な解決策を持っています。問題のクラスを 3 つの個別のクラスに分割します。

  • 必要なデータへのアクセスを提供するクラス。
  • 一時テーブルのものをサポートするコンテキスト マネージャー。
  • そして、すべてのロジックを備えた古いクラス(データベースのものはありません)。

ロジック クラスをインスタンス化するときに、前述のクラスのインスタンスを提供します。正常に動作します。抽象化には少し漏れがあります (特にコンテキスト マネージャー)。ただし、少なくとも今はロジックを適切に単体テストできます。

于 2013-06-10T06:04:58.030 に答える