تخطيط الدليل لاختبارات PHPUnit؟
-
09-06-2019 - |
سؤال
أنا مبرمج جافا منذ فترة طويلة وأعمل في مشروع PHP، وأحاول تشغيل PHPUnit.عند اختبار الوحدة في Java، من الشائع وضع فئات حالات الاختبار والفئات العادية في أدلة منفصلة، مثل هذا -
/src
MyClass.java
/test
MyClassTest.java
وما إلى ذلك وهلم جرا.
عند اختبار الوحدة باستخدام PHPUnit، هل من الشائع اتباع نفس بنية الدليل، أم أن هناك طريقة أفضل لوضع فئات الاختبار؟حتى الآن، الطريقة الوحيدة التي يمكنني من خلالها تشغيل عبارة "include("MyClass.php")" بشكل صحيح هي تضمين فئة الاختبار في نفس الدليل، لكنني لا أرغب في تضمين فئات الاختبار عندما أقوم بالدفع إلى إنتاج.
المحلول
أعتقد أنها فكرة جيدة أن تبقي ملفاتك منفصلة.عادةً ما أستخدم بنية المجلد مثل هذا:
/myapp/src/ <- my classes
/myapp/tests/ <- my tests for the classes
/myapp/public/ <- document root
في حالتك، لتضمين الفئة في ملف الاختبار الخاص بك، لماذا لا تقوم فقط بتمرير المسار بالكامل إلى طريقة التضمين؟
include('/path/to/myapp/src/MyClass.php');
أو
include('../src/MyClass.php');
نصائح أخرى
أنت بحاجة إلى تعديل مسار include_path الخاص بـ PHP حتى يعرف مكان العثور على MyClass.php عندما تقوم بذلك include()
في اختبار وحدتك.
يمكن أن يكون لديك شيء مثل هذا في الجزء العلوي من ملف الاختبار الخاص بك (قبل التضمين):
set_include_path(get_include_path() . PATH_SEPARATOR . "../src");
هذا يلحق بك src
الدليل على مسار التضمين ويجب أن يسمح لك بإبقاء الكود الحقيقي الخاص بك منفصلاً عن كود الاختبار الخاص بك.
إجابة بريان فيليبس لا تذهب إلى حد بعيد بما فيه الكفاية، في تجربتي.أنت لا تعرف ما هو الدليل الحالي عندما يتم تشغيل اختباراتك بواسطة PHPUnit.لذلك تحتاج إلى الإشارة إلى المسار المطلق لملف فئة الاختبار في تعبير set_include_path() الخاص بك.مثله:
set_include_path(get_include_path() . PATH_SEPARATOR .
dirname(__FILE__) . "/../src");
يمكن وضع هذا الجزء في ملف الرأس الخاص به SetupIncludePath.php وإدراجه في ملفات الاختبار باستخدام "require_once"، بحيث لا تقوم مجموعات الاختبار بإلحاق المسار عدة مرات.
أضع حالات الاختبار الخاصة بي بجوار المصدر في ملف يحمل نفس الاسم ولكن بامتداد phpt.يقوم البرنامج النصي للنشر ببساطة بتصفية *.phpt عند الدفع إلى الإنتاج.