我正在尝试对perl代码进行单元测试来模拟一个服务,该服务返回一个包含对象的数组,这些对象也需要被模拟,因为它们有一个我需要模拟的方法getType()。
因此,处理此服务调用结果的代码如下所示:
foreach my $set (@{$serviceResults->getValue()}) {
next unless ($set->getType() eq 'type');
...
}
我试图像这样嘲笑服务:
my $service;
my $mockService = sub {
my (%resultValues) = @_;
$service = mockModule(
'My::Service',
getValue => createMockObject(
# how to mock the getType method?
)
)
};
然后我创建了一个这样的模拟:
$mockService->([
{type=>'a', data=>[0, 5]},
{type=>'b', data=>[2, 3]}]);
那么如何在数组中的每个哈希对象上创建getType方法的模拟?这个数组根据单元测试而变化,我不能使用固定大小的数组。
答案 0 :(得分:1)
你有没有看过Class::Tiny?它提供了一个非常小,重量轻的物体。
use strict;
use warnings;
use feature qw( say );
package Mockable;
use Class::Tiny qw( getType );
package main;
my $foo = Mockable->new(
getType => 'ZZZ',
);
say $foo->getType; # prints ZZZ
这将模拟您需要的方法。如果你需要更重的东西,你也可以考虑使用Moo创建一个小类,只需从这个类中创建具有你需要的访问器的对象。