2011-01-26 58 views
1

我想對我的模塊進行一些測試。如何測試使用硬編碼配置文件的模塊函數?

不幸的是,這些模塊中的一些功能使用硬編碼的配置文件。

package My::Module; 

use strict; 
use warnings; 
use Readonly; 

Readonly my $CONF_FILE => '/my/conf_file.xml'; 

=head1 FUNCTIONS 

=head2 Info($appli) 

Returns Application Information 

=cut 

sub Info 
{ 
    my $appli = shift; 

    my $conf = MyXML::Read($CONF_FILE); 
    foreach my $a (ARRAY($conf->{application})) 
    { 
    return ($a) if ($a->{name} eq $appli); 
    } 

    return (undef); 
} 
[some others functions that use this config file...] 

我想到的解決方案是在每個模塊中創建一個新的函數,以便在需要時更改此默認配置文件。

然後,我將使用該功能在我的測試中...

你有任何其他(更好?)的想法?

回答

5

那麼,我告訴你的正確的事情是「不要使用硬編碼路徑」。我承諾,它會在未來某個時候回來並咬你。

但是......假設你決心使用它們,有許多方法可以允許覆蓋。你說的沒錯,你可以添加,它可以讓你改變它的功能,或者您可以使用一個環境變量:

 
    Readonly my $CONF_FILE => $ENV{'MY_CONF_FILE'} || '/foo/bar'; 

但正確的事情仍然是允許在適當如果要通過其他項目你有一個選擇。

+0

+1表示「不要硬編碼」。使用可以換出新配置文件的配置文件可以在測試中提供更多的靈活性。 – Ether 2011-01-26 22:54:45

相關問題