gpt4 book ai didi

perl - 在 Perl 中模拟父类(super class)调用(使用 Test::MockObject)

转载 作者:行者123 更新时间:2023-12-04 08:50:22 24 4
gpt4 key购买 nike

我在一些测试中使用了 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/

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