ミドルウェアを使った処理のテストでは、テストのための設定でその時限りのデーモンを立ち上げて使いたいものです。 例えば MySQL であれば Test::mysqld 、memcached であれば Test::TCP などを使うことで手軽にデーモンを立ち上げる仕掛けを作ることができます。これを prove にフックさせたりすると、マニュアルでテスト用のデーモンを立ち上げる必要がなくなるという方法がとれます。
- テストのためにデーモンを自動的に起動するやりかた2011年版 – Perl Advent Calendar Japan 2011 Test Track
- perlbrew+Carton+Amon2+Test::mysqldみたいな – As a Futurist…
Redis を使った処理のテストを書く必要があり、これと同じような方法で立ち上げる設定を作ろうとしました。 デフォルトとは異なるポートで Redis のサーバを立ち上げてあげればいいのですが、redis-server コマンドは起動時の引数で直接ポート指定ができず設定ファイルとして渡す必要があります。ちょっと面倒だな、と思って手抜きをしようと探したところ、p5-Redis のテストコードの中に目的のものを見つけました。
このモジュールを use して、テスト開始時に呼び出して Redis のデーモンを起動、テスト終了後にデーモンを終了してあげればよさそうです。 フレームワークとして Amon2 を使っていたので、t::Util のようなモジュールを作って必要なテストで use してあげるような仕組みでやってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
$ENV{TEST_REDIS} に格納されるのは “127.0.0.1:11121″ のような接続先アドレスなので、Redis への接続時に使われるように設定しました。
config はこんな感じ。
1 2 3 4 5 6 |
|
コンストラクタはこんな感じ。(Teng とかとほぼ同じですが。。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
これで無事、テストを走らせるときに一緒に Redis が立ち上がるようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
めでたしめでたし。
と思ったら、ちゃんと Test::RedisServer というモジュールがつくられていました。
こちらだと Test::mysqld と同じように書けるのですっきりして見やすそうです。typester++