2012-11-22 50 views
3

我在測試過程中使用模塊Sub::Override來模擬子例程。我實際上測試了一個名爲sub_a的子例程。 sub_a正在調用另一個子例程sub_b來完成一些工作。 sub_b實際上是通過ssh連接執行一些命令,我​​想在我的測試模式下進行模擬。所以我使用sub :: override來模擬sub_b。Perl Sub :: Override命名問題

sub_a{ 
... 
sub_b(arg1, arg2) 
} 

在我的測試代碼,我喜歡這個

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

覆蓋它在上面的代碼,如果SUB_B和SUB_A是在同一個班,則覆蓋是成功的。否則,覆蓋不起作用。 我可以用SUB_B的完全合格的名字從SUB_A

sub_a{ 
... 
package::filename::sub_b(arg1, arg2); 
} 

調用時,上面的代碼修復該問題,並取代是成功的解決這個問題。但我不想這樣做,因爲我沒有這個代碼,而且它看起來很醜。還有其他解決方案嗎?

回答

5

我推測sub_b是由包含sub_a的包導入的?

您正在更改名稱package_of_sub_b::sub_b所指的子。

您不會更改名稱package_of_sub_a::sub_b所指的子。

如果您要解析的第二個名稱,那麼您需要覆蓋包含sub_a的包中的sub_b

override_sub('package_of_sub_a::sub_b', ...); 
+0

是sub_b被包含sub_a的包導入,然後像你提到的那樣調用它,解決了問題,謝謝:) – comatose