Perlの組み込みバックテックオペレーターをmockするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3678655

質問

バックテックを使用している私の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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top