如何测试使用硬编码配置文件的模块功能?

seb*_*ert 1 perl

我想对我的模块进行一些测试.

不幸的是,这些模块中的某些功能使用硬编码配置文件.

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)

我想到的解决方案是在每个模块中创建一个新函数,在我需要它时会更改这个默认配置文件.

然后我将在我的测试中使用该功能......

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

Wes*_*ker 5

好吧,我告诉你的正确方法是"不要使用硬编码路径".我保证,它会在未来的某个时刻回来咬你.

但是......假设您决定使用它们,有许多方法可以允许覆盖.你是对的,你可以添加一个可以让你改变它的功能,或者你可以使用一个环境变量:

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

但正确的做法是,如果你有选择的话,还可以让其他物品正确传递.