2

データベース接続を管理するクラスで 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 のドキュメントに従って「インスタンス モッキング」を使用してみましたが、自動ロードを使用しているため、「致命的なエラーでクラスを再宣言できません」(当然) という結果になります。

テストで純粋に使用されるコードでコントラクトを汚染したくないのですが、それが私の唯一の選択肢ですか?

ご協力いただきありがとうございます

4

1 に答える 1