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

时间:2011-01-26 22:38:58

标签: 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...]

我想到的解决方案是在每个模块中创建一个新功能,在我需要时会更改此默认配置文件。

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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