من ملف اختبار Perl ، كيف يمكنني التحقق من محتويات الملف؟

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

  •  23-09-2019
  •  | 
  •  

سؤال

أرغب في اختبار برنامج نصي كتبته في Perl والتحقق من الإخراج الذي يكتبه إلى ملف. لقد كتبت ذلك منذ بعض الوقت ولا أرغب في تعديله إلى حد تحويله إلى وحدة نمطية ، لكنني أرغب في اختبار الانحدار قبل إضافة بعض التغييرات الوظيفية الصغيرة.

حتى الآن لدي

use Test::Command tests => 10;

exit_is_num($cmd, 0);
....

لكن الأمر ينتج بعض الملفات وأريد التحقق من تلك الملفات هي نفسها كما أتوقع (إما متساوية أو تتطابق مع بعض regexp). أي اقتراحات

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

المحلول

لا يوجد شيء سحر حول الاختبار. اقرأ الملفات في ، تحقق من أن لديهم المحتويات الصحيحة. مستنقع بسيط.

open my $fh, $file;
my $have = join '', <$fh>;

is $have, <<'WANT', "contents of $file";
The quick brown fox
jumped over the lazy grey dog.
WANT

لا شيء يكسر هناك. اختبار :: ملف :: المحتويات سوف يوفر لك بعض وظائف الأداة المساعدة حتى لا تضطر إلى كتابة ذلك مرارًا وتكرارًا.

إذا كنت تختبر مجموعة من الملفات ، فيمكنك عمل بيانات العملية.

my %file_tests;
$file_tests{"expected_filename"} = <<'WANT';
Expected content
WANT
... and so on ...

for my $file (keys %file_tests) {
    my $want = $file_tests{$file};

    file_contents_is($file, $want, "contents of $file");
}

إذا كانت المحتويات كبيرة ، فقد ترغب في التمسك بالإخراج المتوقع في الملفات واستخدام ملفات _contents_identical ().

أخيرًا ، إذا كنت ترغب في التأكد من أن البرنامج قد أنتج فقط الملفات التي تتوقعها ، ولا توجد ضوايا ، وقم بإنشاء دليل مؤقت ، و chdir في ذلك ، وتشغيل البرنامج من هناك ، والتحقق من الدليل يحتوي فقط على الملفات التي تتوقعها. سأترك ذلك كتمرين للقارئ.

نصائح أخرى

حسنًا ، سأذهب مع نهج DIY القوة الغاشمة (ومع ذلك ، فمن الممكن أن يكون هناك بالفعل بعض وحدة الاختبار مع ملفات API للتحقق ابحث أعمق :).

سأصف إعداد اختبار عام إلى حد ما ، قد تحتاج/تحتاج فقط إلى جوانب اختبار ملفات محددة للغاية منه.

ما نقوم به في هذه الحالة هو حرفيًا ما هو مواصفاتك الوظيفية أعلاه ، كجزء من إطار الاختبار العام:

  • احصل على مكتبة اختبار مع طريقتين (من بين أمور أخرى) - test_file_identical() و test_grep_file(). إذا كنت بحاجة إلى مساعدة في كتابة هذين ، فيرجى إسقاط تعليق وسأقدم بعض التلميحات (نستخدم مقارنات مختلفة ، بما في ذلك مجموعة من -e, ، مقارنات مختلفة stat السمات ، مقارنة سلاسل المحتوى من الملف المختبري مقابل الملف القياسي الذي تم الحصول عليه عبر File::Slurp والقيام grep من الملف ، سطر سطر أو عبر محتويات متوفرة للملفات الصغيرة ، بما في ذلك مقارنة نتائج GREP المدفوعة بملف قياسي.

  • اطلب من حالات الاختبارات التي يتم تنظيمها في المخرجين الفرعيين (أو كرات القطران) ، واحد لكل اختبار ، ويتكون كل اختبار من دليلين - ملفات الإدخال وملفات الإخراج المتوقعة.

  • اطلب من حلقة برنامج اختبار محرك الاختبار على حالات الاختبار (والتي يتم وصفها بالنسبة لنا إما عن طريق بنية بيانات PERL أو الأفضل من ذلك ، ملف XML بحيث يمكن لمحللي الأعمال أن يملأ معهم إذا لزم الأمر).

  • إذا حددت حالة الاختبار أن الاختبار يحتاج إلى مطابقة (بالضبط أو عبر GREP) ، فإن محرك الاختبار يجد الملفات المناسبة (إما الأسماء المرمزة ، أو عبر نمط الاسم المحدد في حالة الاختبار) ، قم بتطبيق طرق اختبار الملفات المذكورة في البداية نقطة الرصاص

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top