DBIx::QueryLogを使ってちゃんとSQLが流れているかテストする - $shibayu36->blog;で、流れているSQLをテストしたいと言う話をしたら、tokuhiromさんにDBIx::Tracerを使えばもう少しシンプルにかけると言われたので、やってみました。
(再掲) テストしたい状況
package My::DBI; use strict; use warnings; use DBI; sub connect { my ($dsn, $username, $password) = @_; my $dbh = DBI->connect($dsn, $username, $password, { Callbacks => { connected => sub { my $dbh = shift; $dbh->do("SET NAMES utf8") or warn $dbh->errstr; return; } } }); } 1;
DBIx::Tracerを使ってみる
use strict; use warnings; use Test::More; use DBIx::Tracer; my $sql = ''; my $tracer = DBIx::Tracer->new(sub { my %args = @_; $sql .= $args{sql}; }); My::DBI->connect('dbi:mysql:dbname=sample;host=localhost', 'user', 'pass'); like $sql, qr{SET NAMES utf8};
My::DBI::Loggerみたいなのを作らなくて済むので便利ですね。