我有以下場景,我需要模擬具有多個包的模塊中的子例程。模擬具有多個包的Perl模塊
我的模塊(moddemo.pm)
package A;
sub helloa
{
print "Hello, Im in demomod module of package A\n";
return 1;
}
package B;
sub hellob
{
print "Hello, Im in demomod module of package B\n";
return 1;
}
1;
我需要模擬A :: helloa(),B :: hellob()子程序。這是我嘗試過的代碼,但失敗了。
#!/usr/bin/perl
use Test::MockModule;
use moddemo;
{
my $mockobj = new Test::MockModule('moddemo');
$mockobj->mock('A::helloa', sub { print "This is mocked object calling helloa function\n"; });
$mockobj->mock('B::hellob', sub { print "This is mocked object calling hellob function\n";});
modobj::A::helloa();
modobj::B::hellob();
}
任何幫助如何模擬這些子程序?提前致謝。
非常感謝。這工作很好!但是當模塊有多個包時,這個方法是否會被嘲笑? – Abhinay 2014-10-29 06:51:58
我是這樣做的,因爲使用Test :: MockModule執行它不適用於與.pm文件命名不同的軟件包。我想你可以認爲這是一個更手動的方式。在這種情況下,更適合你的另一個模塊是https://metacpan.org/pod/Sub::Override。 – stevenl 2014-11-03 00:45:54