我想对我的一个使用反引号的 Perl 程序进行单元测试。有没有办法模拟反引号,以便它们执行与执行外部命令不同的操作?
另一个问题显示了我需要什么,但在 Ruby 中。不幸的是,我不能选择在这个项目中使用 Ruby,也不想避免反引号。
我想对我的一个使用反引号的 Perl 程序进行单元测试。有没有办法模拟反引号,以便它们执行与执行外部命令不同的操作?
另一个问题显示了我需要什么,但在 Ruby 中。不幸的是,我不能选择在这个项目中使用 Ruby,也不想避免反引号。
您可以*模拟内置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或更高版本。
除了使用反引号,您可以使用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