データベースを操作しながら、ユニットのテストを可能にするOOP戦略にはどのようなものがありますか?Userクラスがあり、本番環境がMySQLに対して機能しているとします。PHPを使用してここに示す2つの可能なアプローチがあります。
load()
およびのインターフェイスで$ data_sourceを渡し、save()
データのバックエンドソースを抽象化します。テスト時には、別のデータストアを渡します。$ user = new User($ mysql_data_source); $ user-> load( 'bob'); $ user-> setNickname( 'Robby'); $ user-> save();
データベースにアクセスし、結果行をユーザーのコンストラクターに渡すファクトリーを使用します。テスト時には、$ rowパラメーターを手動で生成するか、UserFactory :: $ data_sourceでオブジェクトをモックします。(変更をレコードに保存するにはどうすればよいですか?)
class UserFactory { static $data_source; public static function fetch( $username ) { $row = self::$data_source->get( [params] ); $user = new User( $row ); return $user; } }
ここにデザインパターンとクリーンコードがありますが、適用可能な概念を見つけるのに苦労しています。