gpt4 book ai didi

perl - 设计一个perl Moose类方便测试

转载 作者:行者123 更新时间:2023-11-28 19:57:15 26 4
gpt4 key购买 nike

我正在尝试用 perl 设计一个类。我正在使用驼鹿。我正在使用外部模块(我们将其命名为 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。

最佳答案

您可以使用 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 中调用时,它将返回您希望它返回的受控值。你可以用它做很多其他的事情。我建议您查看文档。

关于perl - 设计一个perl Moose类方便测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com