我想单元测试一个使用反引号的我的Perl程序.有没有办法模拟反引号,以便它们执行与执行外部命令不同的内容?
Another question shows what I need,但在Ruby.不幸的是,我不能选择在这个项目中使用Ruby,也不想避免反驳.
解决方法
您可以*模拟内置的
readpipe
功能.当Perl遇到反引号或qx表达式时,Perl会调用你的mock函数.
- 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 version 5.8.9或更高版本.