我在测试期间使用模块Sub::Override来模拟子例程。我实际上正在测试一个名为 sub_a 的子例程。sub_a 正在调用另一个子程序 sub_b 来做一些工作。sub_b 实际上是通过 ssh 连接执行一些我想在测试模式下模拟的命令。所以我使用 sub::override 来模拟 sub_b。
sub_a{
...
sub_b(arg1, arg2)
}
在我的测试代码中,我像这样覆盖它
my $override_sshCommand = override_sub( 'package::filename::sub_b', sub ($$) { return "success"; }, undef );
在上面的代码中,如果 sub_b 和 sub_a 在同一个类中,则覆盖成功。否则覆盖不起作用。从 sub_a 调用时,我可以通过使用 sub_b 的完全限定名称来解决此问题
sub_a{
...
package::filename::sub_b(arg1, arg2);
}
上面的代码修复了问题,覆盖成功。但我不想这样做,因为我不拥有该代码,而且它看起来也很丑陋。还有其他解决方案吗?