Как мне издеваться над встроенным оператором Perl? - PullRequest
10 голосов
/ 09 сентября 2010

Я бы хотел провести модульное тестирование моей Perl-программы, которая использует обратные ссылки. Есть ли способ смоделировать обратные галочки, чтобы они делали что-то отличное от выполнения внешней команды?

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

Ответы [ 2 ]

15 голосов
/ 09 сентября 2010

Вы можете * макетировать встроенную функцию readpipe. Perl вызовет вашу фиктивную функцию, когда встретит обратные пометки или выражение qx.

BEGIN {
  *CORE::GLOBAL::readpipe = \&mock_readpipe
};

sub mock_readpipe {
  wantarray ? ("foo\n") : "foo\n";
}

print readpipe("ls -R");
print `ls -R`;
print qx(ls -R);


$ perl mock-readpipe.pl
foo
foo
foo

* - если у вас есть версия Perl 5.8.9 или более поздняя.

2 голосов
/ 09 сентября 2010

Вместо использования обратных кавычек вы можете использовать capture из IPC :: System :: Simple , а затем написать фиктивную версию capture () в своем модульном тесте.

# application
use IPC::System::Simple qw(capture);
my $stuff = capture("some command");

# test script
{
     package IPC::System::Simple;
     sub capture
     {
         # do something else; perhaps a call to ok()
     }
}

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