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

标签 perl unit-testing inheritance

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

相关文章:

perl - 为什么 Net::SSH2::File 只允许写入 32500 字节?

Ubuntu 上的 Perl Ora2Pg

arrays - Perl 中的引用 : Array of Hashes

ruby - 什么是适合 Rails 3 的测试框架?

c++ - GDB:如何从子对象打印/调用父函数?

java - 如何修复 "specify a valid range of job id' 以供 WorkManager 使用”

arrays - Perl:为什么 for 和 foreach 给出不同的结果?

javascript - Angular Testing 示例失败

java - 如何模拟 SecurityContext

c++ - 无需继承直接访问类接口(interface)中成员的成员