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