سؤال

أنا مبرمج جافا منذ فترة طويلة وأعمل في مشروع 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 عند الدفع إلى الإنتاج.

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