Perl Sub :: Override的命名问题

com*_*ose 3 perl unit-testing

我在测试期间使用模块Sub :: Override来模拟子程序.我实际上正在测试一个名为sub_a的子程序.sub_a正在调用另一个子例程sub_b来做一些工作.sub_b实际上是通过ssh连接执行一些命令,我​​想在我的测试模式下进行模拟.所以我使用sub :: override来模拟sub_b.

sub_a{
 ...
 sub_b(arg1, arg2)
}
Run Code Online (Sandbox Code Playgroud)

在我的测试代码中,我像这样覆盖它

my $override_sshCommand = override_sub( 'package::filename::sub_b', sub ($$) { return "success"; }, undef );
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,如果sub_b和sub_a属于同一个类,则覆盖成功.否则覆盖不起作用.我可以通过在从sub_a调用时使用sub_b的完全限定名来解决此问题

sub_a{
 ...
 package::filename::sub_b(arg1, arg2);
}
Run Code Online (Sandbox Code Playgroud)

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

ike*_*ami 5

我推测sub_b是由包含的包导入的sub_a

您正在更改名称package_of_sub_b::sub_b所指的子.

您没有更改名称package_of_sub_a::sub_b所指的子.

如果您要解析的第二个名称,则需要覆盖sub_b包含的包中的名称sub_a.

override_sub( 'package_of_sub_a::sub_b', ... );
Run Code Online (Sandbox Code Playgroud)