سؤال

أرغب في اختبار وحدة برنامج Perl الذي يستخدم backticks. هل هناك طريقة للسخرية من backticks حتى يفعلوا شيئًا مختلفًا عن تنفيذ الأمر الخارجي؟

سؤال آخر يوضح ما أحتاجه, ، ولكن في روبي. لسوء الحظ ، لا يمكنني اختيار استخدام Ruby لهذا المشروع ، ولا أريد تجنب backticks.

هل كانت مفيدة؟

المحلول

تستطيع* سخرية المدمجة readpipe وظيفة. سيتصل بيرل بوظيفة وهمية عندما تواجه عصيًا أو 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 أو لاحقا.

نصائح أخرى

بدلاً من استخدام backticks ، يمكنك استخدام 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