Как проверить функции модуля, которые используют жестко закодированный файл конфигурации? - PullRequest
1 голос
/ 27 января 2011

Я хочу сделать несколько тестов на моих модулях.

К сожалению, некоторые функции в этих модулях используют жестко закодированные файлы конфигурации.

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 Ответ

5 голосов
/ 27 января 2011

Что ж, я бы сказал, что вы не должны использовать жестко закодированные пути. Я обещаю, что он вернется и укусит вас в будущем.

Но ... если вы решили использовать их, существует несколько способов разрешить переопределение. Вы правы, вы можете добавить функцию, которая позволит вам изменить ее, или вы можете использовать переменную окружения:

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

Но правильная вещь по-прежнему состоит в том, чтобы разрешить другим элементам правильно передаваться, если у вас есть выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...