I持ってデータベースを作成し、次のサブルーチン:テストエラーは::ループによってスロー警告する
sub create_db {
my $self = shift;
my $name = shift;
$self->dbh->do("create database $name")
}
このサブルーチンは、ループ内で複数のデータベースを生成し、この1によって呼び出されます。
sub add_all_databases {
my $self = shift;
foreach my $year (@{$self->years}) {
my $name = DB_NAME_PREFIX . $year;
$self->create_db($name);
}
}
データベースがすでに存在する場合、Perlは警告を生成します。私はトンを検査するためのテストを作成したい
DBD::mysql::db do failed: Can't create database 'db_2014'; database exists
をデータベースがすでに存在する場合、警告がスローされます。私はこのテストでそれを試みました:
use Test::Warn
warnings_like {$i->add_all_databases} qr{do failed}, 'throws error if database exists';
しかし、それは動作していないようです。
not ok 17 - throws error if database exists
# Failed test 'throws error if database exists'
# at ./importer.t line 69.
# found warning: DBD::mysql::db do failed: Can't create database 'db_2000'; database exists at /home/steve/perl/perl-lib/DB.pm line 46, <DATA> line 1.
# found warning: DBD::mysql::db do failed: Can't create database 'db_2001'; database exists at /home/steve/perl/perl-lib/DB.pm line 46, <DATA> line 1.
# found warning: DBD::mysql::db do failed: Can't create database 'db_2002'; database exists at /home/steve/perl/perl-lib/DB.pm line 46, <DATA> line 1.
# expected to find warning: (?^:do failed)
私はテストスクリプトから次のように出力されます。どのテストに合格するのですか?
OK、3つのデータベースを生成しようとすると、配列参照の中で 'qr {do failed}'を3回実行する必要があります。私は、より良い方法がない限り、私のテストで作成されるデータベースの数を予測する必要があると思います。 – StevieD