我在一些测试中使用MockObjects,只需要通过调用SUPER类来测试函数,我似乎无法使其工作。 UNIVERSAL可以调用$ this-> SUPER :: save()不被嘲笑吗?如果是的话,你是怎么做到的?
感谢。
编辑:
发现它!使用fake_module
Test::MockObject
所以,让我们说你的基础模块Some::Module
,你的子程序正在进行$this->SUPER::save
调用,使用
my $child_class_mockup = Test::MockObject->new();
$child_class_mockup->fake_module(
'Some::Module',
save => sub () { return 1; }
);
让问题保持开放几天,在接受此答案之前,获取有关不同方式/库的信息(如果SUPER呼叫有超级呼叫?),那么
答案 0 :(得分:2)
找出对象的超类名称(或者其中一个超类,因为Perl具有多重继承),并在超类的包中定义save
调用。
例如,如果你有
package MyClass;
use YourClass;
our @ISA = qw(YourClass); # <-- name of superclass
...
sub foo {
my $self = shift;
...
$self->SUPER::save(); # <--- want to mock this function in the test
...
}
sub save {
# MyClass version of save method
...
}
然后在你的测试脚本中,你会说
no warnings 'redefine'; # optional, suppresses warning
sub YourClass::save {
# mock function for $yourClassObj->save, but also
# a mock function for $myClassObj->SUPER::save
...
}