我正在练习使用 Module::Starter 制作一个新模块。我已经为一个包编写了一些测试用例,它们有时运行良好。
但是我注意到有两个问题:
当测试用例失败时,我想在被测试的函数中放入一些打印语句。我跑了
make test
,它只告诉我我的测试用例失败了,它没有显示我的打印输出,尽管我真的很确定打印语句已经到达。假设我有三个测试用例来测试一个函数,我在函数内部放了一条打印语句,当测试用例运行时,它报告三个测试用例中只有一个运行了。如果我删除打印语句,所有三个测试用例都会运行。这是为什么?
这是我的代码:
# package declaration and stuff...
sub get_in {
my ( $hash, @path ) = @_;
my $ref = $hash;
print 'lol'; # This is the troublesome print statement. Remove this statement and all three test cases will run and pass
foreach (@path) {
if ( ref($ref) eq 'HASH' && exists $ref->{$_} ) {
$ref = $ref->{$_};
} else {
return undef;
}
}
return $ref;
}
这是测试用例:
use Test::More tests => 3;
use strict;
use warnings;
use diagnostics;
require_ok('Foo::Doc');
ok( Foo::Doc::get_in( { 'a' => { 'b' => { 'c' => 101 } } }, 'a', 'b', 'c' ) == 101 );
ok( @{ Foo::Doc::get_in( { 'a' => { 'b' => { 'c' => [ 1, 2, 3 ] } } }, 'a', 'b', 'c' ) } == @{ [ 1, 2, 3 ] } );