データベース接続を管理するクラスで TDD を使用しようとしています。でも
- データベースが利用可能なネットワークから離れて開発していることがよくあります
- SQLite に対しても、実際の接続を台無しにしないでクラスをテストしたいだけです
:memory:
- プラットフォームに依存しない方法で接続をテストしたい場合があります (たとえば、PDO オブジェクトを MySQLi オブジェクトに交換するなど)。特に、データベースはすべてが MySQL ではないため、一部は SQLServer です。
基本的に私はこれをしたい:
class ConnectionManager {
...
public function getConnection($name) {
$params = $this->lookup($name);
return new \PDO($params['spec'], $params['username'], $params['password']);
}
}
そして私のテストランナーでは:
class ConnectionManagerTest extends \PHPUnit_Framework_TestCase {
public function testGetConnection() {
$cxn = new ConnectionManager();
$this->assertNotNull($cxn->getConnection('test')); // or whatever
}
}
どうにかして PDO クラスのモックを使いたいと思っています。テスト クラス コンストラクターまたはそのメソッドの 1 つに明示的なパラメーターを追加する唯一のオプションはありますか? Mockery のドキュメントに従って「インスタンス モッキング」を使用してみましたが、自動ロードを使用しているため、「致命的なエラーでクラスを再宣言できません」(当然) という結果になります。
テストで純粋に使用されるコードでコントラクトを汚染したくないのですが、それが私の唯一の選択肢ですか?
ご協力いただきありがとうございます