У меня есть следующая подпрограмма, которая создает базу данных:ошибки тестирования с Test :: Предупреждать выброшена петлей
sub create_db {
my $self = shift;
my $name = shift;
$self->dbh->do("create database $name")
}
Эту подпрограмма вызывается этим, который генерирует несколько баз данных в цикле:
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)
Как правильно написать тест, который пройдет?
ОК, теперь я вижу, что если я пытаюсь создать 3 базы данных, мне нужно иметь 'qr {do failed}' в ссылке массива 3 раза. Думаю, мне нужно предвидеть, сколько баз данных будет создано в моем тесте, если не будет лучшего способа. – StevieD