こんにちは、PHPUnitの4.8モックMySQLデータベースインタフェース
私は古いmysql
ライブラリー(例えばmysql_query($sql)
)を使用するレガシーコードの束を持っているし、PHPUnitのでそれをテストしようとしています(4.8を実行すること最新のものですさまざまな理由からサーバー上で)。
誰かがこのデータベース接続を模擬して、あらかじめ決められたクエリを実行したときに所定の結果を返す方法を知っていますか?私はgetConnection()を使用してみました(ここでは、ドキュメントごとに:http://devdocs.io/phpunit~4/database)無駄に。例えば
私はこのクラスを持っている:
class Raffle {
...
public static function loadAll($filter=""){
//$filter = mysql_real_escape_string($filter); // protect against SQL injection
$raffles = []; // the array to return
$sql = "SELECT * FROM raffles $filter;"; // include the user filter in the query
$query = mysql_query($sql);
//echo mysql_error();
while($row = mysql_fetch_assoc($query)){
$raffles[] = Raffle::loadFromRow($row); // generate the raffe instance and add it to the array
}
return $raffles; // return the array
}
...
}
(mysql_connect()
コールはファイル内で行われているが、それは、クラスファイル自体に必要とされていないことをすべてのページにロードされているdb.php
と呼ばれる。)
ありがとうございます。
あなたは私たちにいくつかのコードを表示できますか?どのように接続が作成されたか、それはDIによって渡されますか?それを使用するクラスに直接インスタンス化されていますか?それは私たちを助けるかもしれません。 – olibiaz
あなたはDIが何を意味するのかはっきりしていませんが、基本的には、すべての公開ページにインポートされる資格情報とともにmysql_connect()を呼び出すファイルがあります。したがって、クラスがページにロードされると、mysql接続はすでに開かれています。私は面白いMockingメソッドでそれを回避することがほとんどできました。それがうまくいくなら、私はそれをtommorow :-)!と答えて投稿します!ありがとう! –
私は依存性注入について話しています。問題を説明する言葉よりも効率的なコードを表示し、解決策を見つけました。テストする関数/メソッドと、接続がどのように/どこに作成されたかを表示します。あなたの試しに大丈夫です。 – olibiaz