Test::mysqld で Q4M のテストを書く方法
yappo perl, test, memcached Test::memcached もほすい Test::Q4M もほすぃ Test::Pg もほすい
はてなブックマーク - yappoのブックマーク / 2009年8月10日
Test::Pg は書いた。memcached は個人的に需要がない。Q4M のテストなら、こんな感じで書けます。
use strict; use warnings; use DBI; use Test::More; use Test::mysqld; my $mysqld = Test::mysqld->new( my_cnf => { skip_networking => '' }, ) or plan skip_all => $Test::mysqld::errstr; { # setup my $dbh = DBI->connect( 'DBI:mysql(PrintError=>0,RaiseError=>0):test;user=root;mysql_socket=' . $mysqld->base_dir . '/tmp/mysql.sock', ) or die $DBI::errstr; # check mysql version $dbh->selectrow_arrayref('SELECT version()')->[0] =~ /^5\.[1-9]/ or plan skip_all => 'test requires mysql >= 5.1'; # install q4m for my $cmd ( q{INSTALL PLUGIN queue SONAME 'libqueue_engine.so'}, q{CREATE FUNCTION queue_wait RETURNS INT SONAME 'libqueue_engine.so'}, q{CREATE FUNCTION queue_end RETURNS INT SONAME 'libqueue_engine.so'}, q{CREATE FUNCTION queue_abort RETURNS INT SONAME 'libqueue_engine.so'}, q{CREATE FUNCTION queue_rowid RETURNS INT SONAME 'libqueue_engine.so'}, q{CREATE FUNCTION queue_set_srcid RETURNS INT SONAME 'libqueue_engine.so'}, ) { $dbh->do($cmd) or plan skip_all => 'q4m not found'; } } plan tests => XXX; ...
これをモジュール化すべきかどうかは、微妙かなぁ。