$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

DBIx::Tracerを使って流れているSQLのテストをしてみた話

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みたいなのを作らなくて済むので便利ですね。