私は、その目的がデータベース接続をテストする機能を記述しようとしています。それは、Database
オブジェクトをインスタンス化し、データベースに接続して結果を返そうとします。PHPUnitを使ってオブジェクトをインスタンス化する関数を模擬してテストするには?
擬似コードは、この
<?php
function testDatabaseLogin() {
// Get the database connection information from a file
// ...
// Database is a class which stores the connection information passed,
// When its connect() method is invoked, it tries to connect. nothing fancy
$conn = new Database($host, $port, $username, $password);
return $conn->connect(); // TRUE on success, FALSE otherwise
}
?>
のように見えるこのコードスニペットは、私の状況を簡略化したバージョンですが、それは私の質問を説明するのに十分でなければなりません。
この例では、PHPUnitを使用してDatabase
クラスを模擬する方法を知りたいと思います。私が欲しいのは、私が実際に試行する必要がないように、私は、この関数からDatabase
をインスタンス化することはconnect()
を制御するために
Database
正しい引数は、TRUE
またはFALSE
を
- アサートを返すためにできることです実際のデータベースに接続する
私は検索しましたが、PHPUnit Mockオブジェクトがこのように動作しないようです。どんな助けもありがたいです。一番下の行では、テストを簡単にするのに役立つ場合は、関数の実装を変更することができます。
ありがとうございます。
これが役立つかどうかわかりませんが、私はPDO接続(https://stackoverflow.com/questions/46379109/testing-coverage-with-phpunit-and-pdo)を嘲笑することに関係する質問をしました。合理的な値のためにパラメータを検証する必要があるかもしれませんが、実際に有効であることを確認することはできません。 –
@NigelRenご協力いただきありがとうございます。あなたの 'DBAccess'クラスが' PDO'オブジェクトを受け入れるので私の状況はあなたとは違うと思います。したがって、PHPUnitを使用して 'PDO'オブジェクトをモックして渡すことができます。しかし、私の場合、 'Database'オブジェクトは関数内でインスタンス化されています。つまり、モックオブジェクトを持っていても、内部に渡す方法はありません。 PHPUnitがこのケースを処理できない場合は、関数をリファクタリングしてテスト可能にする必要があります。 – user7509214
私は、一般的なコンセンサスは、テストなどを可能にするための依存関係を注入できることだと思う、https://stackoverflow.com/questions/130794/what-is-dependency-injectionはもっと多くの詳細を与える。 –