Entropy هي مكتبة لتوفير أدوات للعمل مع الاختبار العشوائي في PHPUnit بالإضافة إلى اختبار الأنظمة التي تستخدم وظائف PHP العشوائية مثل rand
و shuffle
.
في بعض الأحيان، تتطلب اختبارات الوحدة إجراء تغييرات على الحالة العامة، أو تغطية الوظيفة التي تغير تلك الحالة. على الرغم من أن هذا ليس الوضع المثالي أبدًا، إلا أنه قد يؤدي غالبًا إلى إنشاء تبعيات غير مقصودة على اختبارات أخرى.
يؤدي تمكين وظيفة خلط الاختبار في Entropy إلى ترتيب عشوائي لترتيب اختباراتك، مما يساعد على تسليط الضوء على هذه التبعيات.
يتجنب خلط اختبار Entropy أيضًا تغيير ترتيب الاختبارات باستخدام وظيفة @depends
في PHPUnit؛ سيعمل العمل المستقبلي على ضمان إمكانية حدوث خلط لهذه الاختبارات عند الاقتضاء.
في بعض الأحيان، قد تجد نفسك في موقف يكون فيه نطاق المدخلات لوظيفة ما كبيرًا جدًا، مما يجعل أخذ مقطع عرضي من تلك المدخلات بمثابة استخدام أكثر كفاءة لمواردك. ولكن ماذا يحدث إذا كان هذا المقطع العرضي به ثقوب قد تفشل فيها اختباراتك؟
إحدى الطرق للتغلب على ذلك هي استخدام المدخلات العشوائية، حيث يتم إنشاء المدخلات بطريقة للحصول على مقطع عرضي عشوائي للنطاقات. بمعنى آخر، استخدام rand
أو أي نهج آخر غير حتمي.
امتدادًا لهذا، الاختبار القائم على الخاصية هو ممارسة تطبيق مدخلات عشوائية على تطبيقك أو وظيفتك، وملاحظة أن المخرجات تلتزم بقواعد معينة أو لها خصائص معينة بالنسبة للمدخلات، بدلاً من الاختبار الدقيق للمساواة مع نتيجة معروفة تعيين.
من خلال إدارة البذرة العشوائية لاختباراتك، لا يسمح Entropy باستخدام هذه الأساليب فحسب، بل يسمح أيضًا بجعلها قابلة للتكرار، إما عن طريق قبول بذرة ثابتة أو استعادتها من آخر عملية تشغيل فاشلة حتى اجتياز مجموعة الاختبار الخاصة بك.
يمكنك إضافة هذه المكتبة إلى مشروعك باستخدام Composer:
$ composer require datto/phpunit-entropy
بمجرد تكوينها، يمكنك تشغيل مجموعة الاختبار الخاصة بك كالمعتاد؛ سوف يعتني المستمع بنفسه. في حالة حدوث خطأ أو فشل في الاختبار، سيتم تخزين البذرة المستخدمة في ملف مؤقت، بحيث سيتم إعادة استخدامها في المرة التالية، بدلاً من إنشاء بذرة جديدة.
يتم توفير المصدر الأساسي لمولد الأرقام العشوائية من ما يصل إلى أربعة مواقع، معروضة هنا بترتيب الأولوية.
إذا تم تعيينه، فسيتم استخدام متغير بيئة SEED
لتجاوز أي إعدادات أخرى. يمكن ضبطه عبر export
، لكن الاستخدام الموصى به هو ضبطه للتشغيل الحالي فقط:
SEED=123456 phpunit -c phpunit.xml tests
قد تكون ثابتة البذور عن طريق التكوين؛ راجع قسم التكوين أدناه.
إذا فشل التشغيل الاختباري، فسيتم تخزين البذرة المستخدمة في ملف مؤقت. ويتم بعد ذلك تحميل هذا في اختبار لاحق، وسيستمر حتى تنجح المجموعة مرة أخرى.
إذا لم يتم تعيين أي بذرة عبر الطرق المذكورة أعلاه، فإن الطريقة النهائية هي استخدام دالة PHP rand
.
بمجرد التثبيت عن طريق الملحن، فإن تكوين أداة الاستماع الاختبارية هو ببساطة مسألة تغيير ملف تكوين PHPUnit الخاص بك (غالبًا phpunit.xml
):
< phpunit xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : noNamespaceSchemaLocation = " http://schema.phpunit.de/4.1/phpunit.xsd "
backupGlobals = " false "
colors = " true "
bootstrap = " bootstrap.php "
>
< listeners >
< listener class = " DattoPHPUnitEntropyListener " >
< arguments >
< array >
< element key = " seeding " >
< array >
< element key = " enabled " >
< boolean >true</ boolean >
</ element >
< element key = " seed " >
< integer >1234567</ integer >
</ element >
< element key = " file " >
< string >/tmp/phpentropy-seed</ string >
</ element >
</ array >
</ element >
< element key = " shuffle " >
< boolean >true</ boolean >
</ element >
</ array >
</ arguments >
</ listener >
</ listeners >
</ phpunit >
إذا تم التعيين على "صحيح"، فسيتم تصنيف منشئ الأرقام العشوائية بواسطة المستمع.
إذا قمت بتعيين البذرة عبر هذه الوسيطة، فسيتم استخدام هذه القيمة فقط لبذر منشئ الأرقام العشوائية. انظر القسم الخاص بأولوية البذور أدناه.
إذا تم تعيينه، فسيتم استخدام هذا الملف لتخزين آخر بذرة عشوائية فاشلة؛ يتم تعيينه افتراضيًا على [TMPDIR LOCATION]/phpunit-entropy-seed
.
إذا تم التعيين على "صحيح"، فسيتم ترتيب ترتيب تنفيذ اختبارات الوحدة بشكل عشوائي (باستثناء المجموعات التي يتم فيها استخدام @depends
). وهذا مفيد في تحديد وتحديد التبعيات بين الاختبارات.
كريستوفر هولت <[email protected]>