Gau*_*nia 8 perl inheritance unit-testing
我在一些测试中使用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; }
);
Run Code Online (Sandbox Code Playgroud)
让问题保持开放几天,在接受这个答案之前获得关于这样做的不同方式/库的输入(如果,SUPER呼叫有超级呼叫?).
找出对象的超类(或超类之一,因为 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
...
}
Run Code Online (Sandbox Code Playgroud)
然后在你的测试脚本中,你会说
no warnings 'redefine'; # optional, suppresses warning
sub YourClass::save {
# mock function for $yourClassObj->save, but also
# a mock function for $myClassObj->SUPER::save
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |