2011-08-10 15 views
8

私はYiiプロジェクトの単体テストを構築しようとしています。PHPUnit用MySQL DBをモック

問題:MySQLデータベース。私はテストを実行するたびにMySQLデータベースを実行する必要はありません。遅くて信頼性が低く、一部のチームメンバーには設定されていない可能性があります。

メモリ内にSQLite DBを作成して使用しますが、Yiiによって作成されたSQLは、MySQLと同じようにSQLite上で動作するようには見えません。私は多くの間違いを受ける。

要約:私はメモリ内のMySQLデータベースを模擬したいと思います。

どうすればいいですか?

答えて

5

Data Access ObjectでMySQL操作をカプセル化します。他の利点を持つビジネスロジックからSQLを隠すだけでなく、残りのアプリケーションをテストするときにmock DAOを使用することができます。 Mockはデータベースを必要とせず、ビジネスロジックがデータレイヤーへの正しい呼び出しを行っていることを検証できます。

これはMchlの答えに似ていますが、模擬を1つ上に移動します。さまざまなmysqliメソッドではなく、findUserByEmail()をモックする方がずっと簡単です。 DAOテストにSQL検証を残し、統合テストではデータベースに対して実行することができます。

1

接続オブジェクトをモックし、query()メソッドが期待されるSQLで呼び出されているかどうかを確認することです。あなたは、あなたが期待しているSQLが正しいことを検証する別の方法が必要です。これは、他のすべてのテストでは実行されないように、個別のテストグループとして実行することも、テストスイートの外に移動することもできます。

関連する問題