我想对我的模块进行一些测试。
不幸的是,这些模块中的某些功能使用硬编码配置文件。
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...]
我想到的解决方案是在每个模块中创建一个新功能,在我需要时会更改此默认配置文件。
然后我将在我的测试中使用该功能......
你还有其他(更好的?)想法吗?
答案 0 :(得分:5)
嗯,我告诉你的正确方法是“不要使用硬编码路径"”。我保证,它会在未来的某个时刻回来咬你。
但是......假设您已经决定使用它们,有许多方法可以允许覆盖。你是对的,你可以添加一个可以让你改变它的功能,或者你可以使用一个环境变量:
Readonly my $CONF_FILE => $ENV{'MY_CONF_FILE'} || '/foo/bar';
但正确的做法是,如果你有选择的话,还可以让其他物品正确传递。