نسخة PHP | نسخة اتوم |
---|---|
5.3 -> 5.6 | 1.x -> 3.x |
7.2 -> 8.1 | 4.X -> 4.1 |
8.x | 4.1 < 4.X (الحالي) |
تمامًا مثل SimpleTest أو PHPUnit، فإن atoum عبارة عن إطار عمل لاختبار الوحدات خاص بلغة PHP. ومع ذلك، فقد تم تصميمه منذ البداية مع أخذ الأفكار التالية في الاعتبار:
يمكن تنفيذها بسرعة ،
تبسيط تطوير الاختبار،
السماح بكتابة اختبارات وحدة موثوقة وقابلة للقراءة وواضحة .
ولتحقيق ذلك، فهو يستخدم الإمكانات التي توفرها PHP على نطاق واسع، لمنح المطور طريقة جديدة تمامًا لكتابة اختبارات الوحدات. لذلك، يمكن تثبيته ودمجه في مشروع قائم بسهولة بالغة، لأنه مجرد أرشيف PHAR واحد ، وهو نقطة الدخول الوحيدة للمطور. وأيضًا، بفضل واجهته السلسة ، فإنه يسمح بكتابة اختبارات الوحدة بطريقة قريبة من اللغة الطبيعية. كما أنه يجعل من السهل تنفيذ الاستبعاد داخل الاختبارات، وذلك بفضل الاستخدام الذكي للوظائف المجهولة وعمليات الإغلاق . يقوم atoum محليًا، وبشكل افتراضي، بتنفيذ كل اختبار وحدة ضمن عملية PHP منفصلة، لضمان العزل . وبطبيعة الحال، يمكن استخدامه بسلاسة للتكامل المستمر، ونظرًا لتصميمه، يمكن تصميمه للتعامل مع الاحتياجات المحددة بسهولة بالغة. يحقق Atoum أيضًا كل هذا دون التأثير على الأداء، حيث تم تطويره ليتباهى ببصمة ذاكرة منخفضة مع السماح بتنفيذ اختبار سريع. ويمكنه أيضًا إنشاء تقارير تنفيذ اختبار الوحدة بتنسيق Xunit، مما يجعله متوافقًا مع أدوات التكامل المستمر مثل Jenkins. يقوم Atoum أيضًا بإنشاء تقارير تغطية التعليمات البرمجية، من أجل تمكين الإشراف على اختبارات الوحدة. وأخيرا، على الرغم من أنه تم تطويره بشكل رئيسي على UNIX، فإنه يمكن أن يعمل أيضا على Windows.
من السهل حقًا تثبيت Atoum : قم باستنساخه من github، أو تنزيل PHAR الخاص به، أو ببساطة استخدم الملحن،
يوفر atoum مستوى عاليًا من الأمان أثناء تنفيذ الاختبار عن طريق عزل كل طريقة اختبار في عملية PHP الخاصة به. وبطبيعة الحال، هذه الميزة متوفرة خارج الصندوق، فلا حاجة لتثبيت أي ملحق إضافي،
يقوم Atoum بإجراء اختبارات في بيئة متوازية مما يجعل المجموعة تعمل بأسرع ما يمكن من خلال الاستفادة من وحدات المعالجة المركزية متعددة النواة الموجودة اليوم،
يوفر Atoum مجموعة كاملة المواصفات من التأكيدات الطبيعية والتعبيرية مما يجعل الاختبارات سهلة القراءة قدر الإمكان. هنا مثال:
<?php$this->عدد صحيح(150) ->أكبر من (100) ->أقل من أو يساوي (200) ;
يدعم atoum بناء جملة يشبه BDD مع الكثير من الكلمات الرئيسية الهيكلية:
<?php$this->معطى($testedInstance = new testClass()) ->و($testedClass[] = $firstValue = uniqid()) ->ثم->حجم($testedInstance)->يساوي(1) ->سلسلة($testedClass[0])->isEqualTo($firstValue) ;
يوفر Atoum محركًا وهميًا بسيطًا للغاية ولكنه قوي جدًا:
<?php$this->معطى($testedInstance = new testClass()) ->and($aMock = new mockfoobar()) // هنا يتم إنشاء نسخة وهمية من فئة foobar ديناميكيًا->and($this->calling($aMock)->doOtherThing = true) // كل استدعاء لـ doOtherThing( ) بواسطة المثيل سيُرجع true->and($testedInstance->setDependency($aMock)) ->ثم->منطقية($testedInstance->doSomething())->isTrue() ->وهمية($aMock) ->call('doOtherThing')->withArguments($testedInstance)->once() // التأكد من استدعاء طريقة doOtherThing() الخاصة بـ $aMock مرة واحدة؛
يوفر atoum واجهة برمجة تطبيقات واضحة للتأكيد على الاستثناءات:
<?php$this->معطى($testedInstance = new testClass()) ->and($aMock = new mockfoobar()) // هنا يتم إنشاء نسخة وهمية من فئة foobar ديناميكيًا->and($this->calling($aMock)->doOtherThing->throw = $exception = new Exception( )) // سيؤدي الاتصال بـ doOtherThing() إلى طرح استثناء->and($testedInstance->setDependency($aMock)) ->ثم->استثناء(وظيفة() استخدام ($testedInstance) { $testedInstance->doSomething(); }) ->isIdenticalTo($استثناء) ;
يتيح لك Atoum أيضًا محاكاة وظائف PHP الأصلية. مرة أخرى، هذا متاح خارج الصندوق:
<?php$this->معطى($this->function->session_start = false) ->و($session = new testClass()) ->ثم->استثناء(وظيفة () استخدم ($session) { $session->start(); }) ->isInstanceOf('projectnamespaceexception') ->hasMessage("غير قادر على بدء الجلسة") ->الوظيفة('session_start')->wasCalled()->once() ;
Atoum قادر على إنتاج العديد من التقارير مثل TAP، Clover، xUnit ليتم دمجها بسهولة مع Jenkins أو أي أداة تكامل مستمرة أخرى،
أتوم يدعم موفري البيانات،
تدعم اختبارات atoum التشغيل التلقائي: ما عليك سوى تضمين مشغل atoum وتشغيل الاختبار باستخدام php path/to/test/file.php
،
ملف تكوين atoum مكتوب حصريًا بلغة PHP (بدون تنسيق XML أو YAML أو أي تنسيق آخر) مما يمنحك أفضل مرونة:
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = new atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atoumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/classes'); ->setTestedClassNamespace('atoumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$runner->setTestGenerator($testGenerator);
يوفر Atoum مولدًا لقالب الاختبار التلقائي،
يوفر Atoum وضع حلقة لإعادة تشغيل الاختبارات الفاشلة بسهولة،
Atoum مليء بالميزات الأخرى المثيرة للاهتمام التي سوف تكتشفها مع مرور الوقت.
يتطلب atoum بالتأكيد PHP >= 5.6.0
أو إصدار أحدث ليعمل. في نظام UNIX، للتحقق مما إذا كان لديك إصدار PHP الصحيح، تحتاج فقط إلى تشغيل الأمر التالي في المحطة الطرفية الخاصة بك:
$ PHP -V | grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+.[0-9]+'
إذا تم عرض PHP 5.6.x
أو ما يعادله، فهذا يعني أن إصدار PHP الصحيح مثبت لديك. إذا كنت تريد استخدام atoum باستخدام أرشيف PHAR الخاص به، فأنت بحاجة أيضًا إلى PHP لتتمكن من الوصول إلى وحدة phar
، والتي تكون متاحة عادةً بشكل افتراضي. في نظام التشغيل UNIX، للتحقق مما إذا كان لديك هذه الوحدة أم لا، تحتاج فقط إلى تشغيل الأمر التالي في جهازك الطرفي:
$ PHP -م | grep -i فار
إذا تم عرض Phar
أو ما يعادله، فهذا يعني أنه تم تثبيت الوحدة بشكل صحيح. يتطلب إنشاء التقارير بتنسيق Xunit وحدة xml
. في نظام التشغيل UNIX، للتحقق مما إذا كان لديك هذه الوحدة أم لا، تحتاج فقط إلى تشغيل الأمر التالي في جهازك الطرفي:
$ PHP -م | grep -i xml
إذا تم عرض Xml
أو ما يعادله، فهذا يعني أنه تم تثبيت الوحدة بشكل صحيح. إذا كنت ترغب في مراقبة معدل تغطية التعليمات البرمجية الخاصة بك عن طريق اختبارات الوحدة، فستكون وحدة Xdebug 2.3 مطلوبة. في نظام التشغيل UNIX، للتحقق مما إذا كان لديك هذه الوحدة أم لا، تحتاج فقط إلى تشغيل الأمر التالي في جهازك الطرفي:
$ PHP -V | grep -oi "xdebug"
إذا تم عرض Xdebug
أو ما يعادله، فهذا يعني أنه تم تثبيت الوحدة بشكل صحيح.
كل ما عليك فعله هو تنزيل أرشيف PHAR الخاص به وتخزينه في المكان الذي تريده، على سبيل المثال ضمن /path/to/project/tests/atoum.phar
. يحتوي أرشيف PHAR هذا على أحدث إصدار تطوير لاجتياز إجمالي اختبارات وحدة atoum . الكود المصدري لـ atoum متاح أيضًا عبر مستودع GitHub. للتحقق مما إذا كان atoum يعمل بشكل صحيح مع التكوين الخاص بك، يمكنك تنفيذ جميع اختبارات الوحدة الخاصة به. للقيام بذلك، تحتاج فقط إلى تشغيل الأمر التالي في المحطة الطرفية الخاصة بك:
$ php atoum.phar --test-it
باستخدام محرر النصوص المفضل لديك، أنشئ path/to/project/tests/units/helloWorld.php
وأضف الكود التالي:
<?phpnamespace memberprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';استخدام atoumatoum;استخدام مشروع البائع;class helloWorld يمتد atoumtest {اختبار الوظيفة العامة قل () {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello World!'); } }
قم بتشغيل المحطة الخاصة بك وقم بتشغيل الأمر التالي:
$ مسار PHP/إلى/اختبار/ملف[أدخل]
يجب أن تحصل على النتيجة التالية أو ما يعادلها:
> نسخة أتوم XXX لفريديريك هاردي. خطأ: استثناء غير مراقب: الفئة التي تم اختبارها "vendorprojecthelloWorld" غير موجودة لفئة الاختبار "vendorprojecttestsunitshelloWorld"
باستخدام محرر النصوص المفضل لديك مرة أخرى، أنشئ path/to/project/classes/helloWorld.php
وأضف الكود التالي:
<?phpnamespace salesproject;class helloWorld {قل الوظيفة العامة () {إرجاع "مرحبًا بالعالم!"؛ } }
في نفس المحطة، قم بتشغيل الأمر التالي مرة أخرى:
$ مسار PHP/إلى/اختبار/ملف[أدخل]
يجب أن تحصل على النتيجة التالية، أو ما يعادلها:
> إصدار أتوم 288 لفريديريك هاردي.> تشغيل البائعprojecttestsunitshelloWorld... [S______________________________________________][١/١] => مدة الاختبار: 0.00 ثانية. => استخدام الذاكرة: 0.25 ميجابايت.> إجمالي مدة الاختبار: 0.00 ثانية.> إجمالي استخدام ذاكرة الاختبار: 0.25 ميجابايت.> قيمة تغطية الكود: 100.00%> مدة التشغيل: 0.08 ثانية.> نجاح (اختبار واحد، طريقة واحدة، تأكيدان) ، 0 خطأ، 0 استثناء)!
<?phpnamespace memberprojecttestsunits;require_once 'path/to/atoum.phar';include_once 'path/to/project/classes/helloWorld.php';استخدام atoumatoum;استخدام مشروع البائع;class helloWorld يمتد atoumtest {اختبار الوظيفة العامة __ البناء () {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello!') ->string($helloWorld->say($name = 'Frédéric Hardy'))->isEqualTo('Hello ' . $name .'!') ; } }
لا تزال وثائق أتوم قيد الكتابة. سيكون موضع تقدير أي مساعدة لتحسينه. ومع ذلك، إذا كنت ترغب في استكشاف إمكانيات atom بشكل أكبر على الفور، فنوصي بما يلي:
قم بتشغيل الأمر php atoum.phar -h
في المحطة الطرفية لديك، أو الأمر php scripts/runner.php -h
،
استكشاف محتويات دليل configurations
في مصدر atoum ، حيث يحتوي على نماذج ملفات التكوين،
استكشاف محتويات دليل tests/unit/classes
في مصدر أتوم ، حيث يحتوي على جميع اختبارات الوحدة،
إقرأ شرائح المؤتمر (الفرنسية) حول هذا الموضوع، المتوفرة على الإنترنت،
اقرأ الويكي (الفرنسية) ،
انضم إلى قناة النقاش،
اطرح الأسئلة عبر البريد الإلكتروني على العنوان support[AT]atoum(DOT)org .
في هذه الحالة، أول شيء تريد القيام به هو تأكيد ما إذا كان لديك أحدث إصدار من الأرشيف. تحتاج فقط إلى تنزيله مرة أخرى. إذا ظل لا يعمل، قم بتشغيل الأمر التالي في نافذة طرفية:
$ php -n atoum.phar -v
إذا حصلت على رقم إصدار atoum ، فإن المشكلة تأتي من إعدادات PHP لديك. في معظم الحالات، قد يكون السبب ضمن الامتدادات، التي قد تكون غير متوافقة مع تنسيق PHAR، أو قد تمنع تنفيذ أرشيفات PHAR كإجراء أمني. يبدو امتداد ioncube
على سبيل المثال غير متوافق مع أرشيفات PHAR، ولذلك يجب عليك إلغاء تنشيطه إذا كنت تستخدمه، عن طريق التعليق على السطر التالي من php.ini
الخاص بك، وذلك عن طريق إضافة البادئة إليه ;
شخصية:
zend_extension = /path/to/ioncube_loader*.*
يمنع ملحق suhosin
تنفيذ أرشيفات PHAR، لذلك يجب تعديل التكوين الافتراضي الخاص به حتى تتمكن من استخدام atoum ، وذلك عن طريق إضافة السطر التالي في ملف php.ini
الخاص بك:
suhosin.executor.include.whitelist="phar"
أخيرًا، إذا أدى تشغيل atoum إلى عرض أحرف على الشاشة تبدو مثل ???%
، فقد يكون ذلك بسبب تعيين التوجيه detect_unicode
داخل ملف php.ini
الخاص بك على 1. لإصلاح المشكلة، تحتاج فقط إلى ضبطه على 0 بواسطة تحرير ملف php.ini
الخاص بك أو عن طريق تشغيل atoum باستخدام الأمر التالي:
$ php -d Detect_unicode=0 atoum.phar [خيارات]
إذا كانت هذه العمليات الثلاث لا تسمح لـ atoum بالعمل، نقترح عليك إرسال بريد إلكتروني إلى العنوان support[AT]atoum(DOT)org ، مع وصف التكوين الخاص بك ومشكلتك بالتفصيل. يمكنك أيضًا طلب المساعدة من طاقم تطوير الذرة على قناة المناقشة الخاصة بمستودع الذرة..
__COMPILER_HALT_OFFSET__
محدد بالفعل /path/to/atoum.phar
يأتي هذا الخطأ من حقيقة تضمين أرشيف atoum PHAR في أكثر من مكان داخل التعليمات البرمجية الخاصة بك باستخدام include
أو require
. لإصلاح هذه المشكلة، تحتاج فقط إلى تضمين الأرشيف باستخدام include_once
أو require_once
فقط، وذلك لضمان عدم تضمينه عدة مرات.
APC هو إطار عمل مجاني ومفتوح وقوي للتخزين المؤقت وتحسين كود PHP الوسيط الموزع على شكل امتداد PHP. عند اختبار الفئات التي تستخدم APC، قد تحصل على بعض رسائل الفشل التي توضح أن وظيفة apc_fetch
غير قادرة على استرداد قيمة. كما هو الحال مع كافة امتدادات PHP، لدى APC بعض خيارات التكوين لتمكينها:
apc.enabled
سواء لتمكين أو تعطيل APC،
apc.enable_cli
، سواء لتمكين أو تعطيل APC لـ PHP CLI.
من أجل استخدام APC مع atoum ، عليك ضبط apc.enabled
و apc.enable_cli
على 1
، وإلا فلن يتم تمكينهما لإصدار PHP CLI، الذي يستخدمه atoum .
عند استخدام atoum والكائنات الساخرة، سوف تحصل في وقت ما على أخطاء segfaults قادمة من PHP. سبب هذه الأخطاء هو XDebug في الإصدار الأقل من 2.1.0 والذي يواجه مشكلة في التعامل مع الانعكاس في بعض الحالات. للتحقق من الإصدار الحالي من XDebug، يمكنك تشغيل php -v
. لإصلاح هذه المشكلة، عليك تحديث XDebug إلى أحدث إصدار ثابت. إذا لم تتمكن من تحديث XDebug على نظامك، فلا يزال بإمكانك تعطيل الامتداد لتجنب حدوث أخطاء segfaults. للتأكد من تحديث XDebug أو تعطيله بنجاح، يمكنك تشغيل php -v
. عند الانتهاء من تحديث XDebug أو تعطيله، قم بتشغيل php atoum.phar --test-it
للتأكد من اختفاء جميع الأخطاء وأن atoum يعمل.
هل تبحث عن خارطة طريق؟
هنا هو العمل الجاري،
وهناك ما سيأتي في الإصدارات القادمة.
تم إنشاء أتوم بواسطة فريديريك هاردي. ويقودها الآن مجتمع قوي من المساهمين. يمكنك العثور عليهم في قائمة المرسلين أو في فريق المساهمين.
تم إصدار Atoum بموجب ترخيص BSD-3-Clause. راجع ملف الترخيص المرفق للحصول على التفاصيل.