12

バックティックを使用している私のPerlプログラムを単体テストしたいと思います。バックティックをモックして、外部コマンドの実行とは異なることを行う方法はありますか?

別の質問は私が必要なものを示していますが、Rubyです。残念ながら、私はこのプロジェクトにRubyを使用することを選択できません。また、バックティックを避けたくありません。

4

2 に答える 2

19

*readpipe組み込み関数をモックすることができます。qxPerlは、バックティックまたは式に遭遇すると、モック関数を呼び出します。

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以降を使用している場合。

于 2010-09-09T16:51:35.567 に答える
2

バックティックを使用する代わりに、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
于 2010-09-09T16:47:39.270 に答える