"Test_mysqld", ported from cpan's Test::mysqld
とまあ、表題の通りですが。
→ GitHub - taiyoh/Test_mysqld-php: from cpan's Test::mysqld
本家のTest::mysqldを見たときに「これは革命や」と感動していたのですが、ちょくちょくあるPHP仕事でも使いたと思っておりまして。しばらくは誰かやってくれないかなぁ、と思っていたのですが、ちょくちょくググッてもなかなか見つからなかったので、作ってしまいました。
使い方は、本家と特に変わりありません。
$my_cnf = array(); // my.cnfに記述する内容を配列でまとめておく $opts = array(); // その他Test_mysqldの設定内容を配列でまとめておく // インスタンス作成 // 本家との一番の違いはコンストラクタの引数で、 // 本家ではmy.cnfに書く内容はmy_cnf => {}にまとめてましたが、 // PHP版ではmy.cnfに記述するためのリストとその他設定のリストを分けてます $mysqld = new Test_mysqld($my_cnf, $opts); // DSN取得 $dsn = $mysqld->dsn(); // DSNを使ってDBに接続 $db = new PDO($dsn); // do something(あとはお好きに)
実装の流れは、ほとんどPerlのものをそのまま使わせていただいております。一部、Perl特有の表記や、PHPだとこう書くと見やすくなるかな、という部分については調整しています。テストについても、TAPで書かれてるものをPHPUnitで書くとこうなるかな、という感じで書いてます。あ、テストについては、最後のマルチプロセスでの試験は省いてしまってます><
symfonyなんかでDB使ったテストを書くとき、よくやる(というかsymfony的にはそれしかサポートしてない)のがenvironment=testで設定しているデータベースにつなぎにいく、というものだと思います。が、それだと万が一オペレーションミスで本番環境で実行してしまったとか、テスト環境だけどDBは共有していて。。。みたいなときに一大事が起こりかねないので、MySQLのインスタンスそのものを別で作ってしまうTest::mysqldの考え方は本当に素晴らしいと思います。