Perlの組み込みバックテックオペレーターをmockするにはどうすればよいですか?
-
01-10-2019 - |
質問
バックテックを使用している私のPERLプログラムをユニットテストしたいと思います。外部コマンドを実行することとは異なることをするように、バックテックをock笑する方法はありますか?
別の質問は、私が必要なものを示しています, 、しかしRubyで。残念ながら、私はこのプロジェクトにRubyを使用することを選択することも、バックテックを避けたくありません。
解決
あなたはできる* 内蔵をock笑します 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
所属していません StackOverflow