我在一些测试中使用了 MockObjects,只需要通过调用 SUPER 类来测试一个函数,但我似乎无法让它工作。可以不模拟像 $this->SUPER::save() 这样的 UNIVERSAL 调用吗?如果是,你是怎么做的?
谢谢。
编辑:
找到了!
使用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 调用有 SUPER 调用怎么办?)。
最佳答案
找出对象的父类(super class)(或父类(super class)之一,因为 Perl 具有多重继承)的名称,并定义 save
调用父类(super class)的包。
例如,如果您有
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
...
}
关于perl - 在 Perl 中模拟父类(super class)调用(使用 Test::MockObject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112427/