3

我在测试期间使用模块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);
}

上面的代码修复了问题,覆盖成功。但我不想这样做,因为我不拥有该代码,而且它看起来也很丑陋。还有其他解决方案吗?

4

1 回答 1

5

我认为sub_b是由包含sub_a?

您正在更改名称package_of_sub_b::sub_b所指的 sub。

您不会更改名称package_of_sub_a::sub_b所指的子项。

如果您正在解析第二个名称,那么您需要覆盖sub_b包含sub_a.

override_sub( 'package_of_sub_a::sub_b', ... );
于 2012-11-22T09:58:56.067 回答