الاختبار الذهبي

يشتمل TFF على مكتبة صغيرة تسمى golden والتي تسهل كتابة الاختبارات الذهبية والحفاظ عليها.

ما هي الاختبارات الذهبية؟ متى يجب أن أستخدمها؟

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

ومع ذلك، يمكن أن تكون الاختبارات الذهبية مفيدة للغاية للتحقق من صحة المحتويات الدقيقة لرسائل الخطأ أو التشخيص أو التعليمات البرمجية التي تم إنشاؤها. في هذه الحالات، يمكن أن تكون الاختبارات الذهبية بمثابة اختبار ثقة مفيد للتأكد من أن أي تغييرات في المخرجات التي تم إنشاؤها "تبدو صحيحة".

كيف أكتب الاختبارات باستخدام golden ؟

golden.check_string(filename, value) هي نقطة الدخول الأساسية إلى المكتبة golden . وسوف يتحقق من سلسلة value مقابل محتويات الملف الذي يكون عنصر مساره الأخير هو filename . يجب توفير المسار الكامل filename عبر وسيطة سطر الأوامر --golden <path_to_file> . وبالمثل، يجب أن تكون هذه الملفات متاحة للاختبارات باستخدام وسيطة data لقاعدة py_test BUILD. استخدم وظيفة location لإنشاء مسار نسبي مناسب وصحيح:

py_string_test(
  ...
  args = [
    "--golden",
    "$(location path/to/first_test_output.expected)",
    ...
    "--golden",
    "$(location path/to/last_test_output.expected)",
  ],
  data = [
    "path/to/first_test_output.expected",
    ...
    "path/to/last_test_output.expected",
  ],
  ...
)

وفقًا للاتفاقية، يجب وضع الملفات الذهبية في دليل شقيق يحمل نفس اسم هدف الاختبار الخاص بها، مُلحقًا بـ _goldens :

path/
  to/
    some_test.py
    some_test_goldens/
      test_case_one.expected
      ...
      test_case_last.expected

كيف أقوم بتحديث الملفات .expected ؟

يمكن تحديث الملفات .expected عن طريق تشغيل هدف الاختبار المتأثر باستخدام الوسائط --test_arg=--update_goldens --test_strategy=local . وينبغي التحقق من الفرق الناتج عن التغييرات غير المتوقعة.