我正在尝试在perl中设计一个类。我正在使用Mooose。我正在使用外部模块(让我们将它命名为PITA :: Parser。
has _parser => (
is => 'ro',
isa => 'object',
builder => _create_parser_object);
#other members here
sub _create_parser_object {
#simplified code
return PITA::Parser->new();
}
sub BUILD {
my $self = shift;
$self->_values($self->load_and_validate_data());
}
sub _load_and_validate_data {
my $values_href;
foreach $key (@key_names) {
$values_href->{$key} = $self->_parser->get_value();
#code to validate the values
return $values_href;
}
我想模仿PITA :: Parser对象。此对象查找不在我的测试文件夹中的特定文件(在新的期间),而是在我的代码将部署的环境中。所以,我试图嘲笑它:
my $mock_parser = Test::MockObject->new();
$mock_parser->mock('new', sub {});
$mock_parser->mock('get_value', sub {});
然后我想创建我班级的对象
my $my_class_object(_parser => $mock_parser);
但是,这不起作用,我得到一个错误,即Test :: MockObject无法找到get_value。
答案 0 :(得分:4)
您可以使用Test::MockObject来模拟解析器对象,并在创建自己的对象时传递它。
my $mock = Test::MockObject->new();
$mock->mock( 'frobnicate',
sub { return 'file that is not part of test environment' } );
my $obj = Your::Class->new(parser => $mock);
ok( $obj->load_and_validate_data );
它将创建一个具有方法frobnicate
的对象。在load_and_validate_data
中调用时,它将返回您希望它返回的受控值。你可以用它做很多其他事情。我建议你看看文档。