DBD::Mockは、名の通りDBのモック。
DBD::Mock - search.cpan.org
先ずは、DBD::Mockの説明。
my $dbh = DBI->connect("DBI::Mock:"); $dbh->{mock_add_resultset} = { sql => 'SELECT foo, bar FROM baz', results => [ [ 'foo', 'bar' ], [ 'this_one', 'that_one' ], [ 'this_two', 'that_two' ], ], } my $result = $dbh->selectall_arrayref("SELECT foo, bar FROM baz");
って感じで。
$resultには、上のresultsの
[ [ 'foo', 'bar' ], [ 'this_one', 'that_one' ], [ 'this_two', 'that_two' ], ]
が入っている感じ。
で、この時注意しないといけないのが、
mock_add_resultsetに入れてあるsqlと全く同じものじゃないとresultが返ってこないんです。
大文字小文字も、同じにするくらいにね。
※ mock_add_resultsetに、参照配列を渡すこともできます。
この時は、sqlのチェックを無視して、値を返してくれます。
ここで、問題なんです。
ORマッパーを使うと、まぁクエリが自動で生成されます。
そんなもんで、大文字小文字も気にするくらい合わせないといけないのでちょっと手間だなぁという。
ちなみに、自分はTengとDBD::Mockで試していたのですが、
Tengでは、FROMやWHERE、LIMITで改行が入るので、改行もDBD::Mockのsql内に含めないと動かなかったです。
ということで、DBD::Mock自体はシンプルに書けるところはよいのでそういう時に使いましょう。