كيف أسخر من مشغل بيرل المدمج في بيرل؟
-
01-10-2019 - |
سؤال
أرغب في اختبار وحدة برنامج 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
لا تنتمي إلى StackOverflow