バックティックを使用している私のPerlプログラムを単体テストしたいと思います。バックティックをモックして、外部コマンドの実行とは異なることを行う方法はありますか?
別の質問は私が必要なものを示していますが、Rubyです。残念ながら、私はこのプロジェクトにRubyを使用することを選択できません。また、バックティックを避けたくありません。
バックティックを使用している私のPerlプログラムを単体テストしたいと思います。バックティックをモックして、外部コマンドの実行とは異なることを行う方法はありますか?
別の質問は私が必要なものを示していますが、Rubyです。残念ながら、私はこのプロジェクトにRubyを使用することを選択できません。また、バックティックを避けたくありません。
*readpipe
組み込み関数をモックすることができます。qx
Perlは、バックティックまたは式に遭遇すると、モック関数を呼び出します。
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以降を使用している場合。
バックティックを使用する代わりに、IPC :: System :: Simplecapture
から使用して、単体テストでキャプチャ()のモックバージョンを作成できます。
# 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