Я пишу новые модульные тесты для существующего модуля, который использует Log::Log4perl
, например:
use Log::Log4perl qw(:easy);
Модуль вызывает INFO( "important message" );
. Я хотел бы издеваться над этим, чтобы проверить из моего тестового кода, что INFO
вызывается при определенных обстоятельствах.
Когда я запускаю тестовый модуль, он не фиксирует вызовы INFO
из модуля. Как правильно издеваться над этими вызовами INFO
?
Вот полный пример:
Mut.pm
#!/usr/bin/perl -w
# Mut : Module under test
use strict;
use warnings;
package Mut;
use Log::Log4perl qw(:easy);
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
INFO( "Mut::new" );
return $self;
}
1;
Мут.т
#!/usr/bin/perl -w
use strict;
use warnings;
package Mut_Test;
use Test::More tests => 1;
use Test::MockModule;
use Test::MockObject;
my @mock_info_output = ();
my $log4perl = Test::MockModule->new('Log::Log4perl');
$log4perl->mock(
'INFO' => sub {
print STDERR $_[0];
push @mock_info_output, @_;
return;
}
);
BEGIN {
use_ok('Mut');
}
{
my $mut = Mut->new;
## Do something here to verify INFO...
}
$log4perl
все еще находится в области видимости, когда вы запускаете тесты? - person Qtax   schedule 23.06.2011my $log4perl
). - person bstpierre   schedule 23.06.2011