سؤال

لقد كان أي شخص أي نجاح إنشاء Zend_Test؟ ما هو الأسلوب / نهجكم وكيف تقوم بتشغيل بك أجنحة الاختبارات / اختبار؟

وسبق لي أن PHPUnit تثبيت والعمل. الآن أنا أحاول أن أكتب بعض الاختبارات تحكم بسيطة. تفترض وثائق الإطار زند أن autoloading هو الإعداد، والتي لم تكن قد فعلت. ما هي طريقة لا على أنت استخدام لautoload الملفات المناسبة؟ أفعل ذلك في ملفي التمهيد طبيعي، ولكن لا أريد لفوضى حتى اختبار لي مع مجموعة من يتضمن وإنشاء مسارات. ستكون مجردة اختبار وحدة التحكم حالة الطبقة وسيلة للذهاب؟

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

وهنا اختباري حتى الآن:

<?php

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
    public function setUp()
    {
        $this->bootstrap = array($this, 'appBootstrap');
        parent::setUp();
    }

    public function appBootstrap()
    {
        $this->frontController->registerPlugin(new Bootstrapper('testing'));
    }

    public function testIndexAction()
    {
        $this->dispatch('/index');
            $this->assertController('index');
            $this->assertAction('index');
    }

}

//straight from the documentation
class Bootstrapper extends Zend_Controller_Plugin_Abstract
{
    /**
     * @var Zend_Config
     */
    protected static $_config;

    /**
     * @var string Current environment
     */
    protected $_env;

    /**
     * @var Zend_Controller_Front
     */
    protected $_front;

    /**
     * @var string Path to application root
     */
    protected $_root;

    /**
     * Constructor
     *
     * Initialize environment, root path, and configuration.
     *
     * @param  string $env
     * @param  string|null $root
     * @return void
     */
    public function __construct($env, $root = null)
    {
        $this->_setEnv($env);
        if (null === $root) {
            $root = realpath(dirname(__FILE__) . '/../../../');
        }
        $this->_root = $root;

        $this->initPhpConfig();

        $this->_front = Zend_Controller_Front::getInstance();
    }

    /**
     * Route startup
     *
     * @return void
     */
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
        $this->initDb();
        $this->initHelpers();
        $this->initView();
        $this->initPlugins();
        $this->initRoutes();
        $this->initControllers();
    }

    // definition of methods would follow...
}

وماذا علي أن أفعل؟

هل كانت مفيدة؟

المحلول

إليك ما فعلته لحملها على العمل:

أولا، نحن بحاجة إلى حل القضية autoloading. سنفعل ذلك من خلال خلق ملف من شأنها أن تشمل جميع الاختبارات، ووضعها في دليل الاختبارات. ملاحظة: أنا نسخ الى حد كبير كل هذا من وجهة نظري /public/index.php

# /tests/loader.php

<?php

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/'));

set_include_path( APPLICATION_PATH . '/../library' . PATH_SEPARATOR .
                  APPLICATION_PATH . '/models' . PATH_SEPARATOR .
                  APPLICATION_PATH . '/forms' . PATH_SEPARATOR .
                  get_include_path() );

require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

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

<?php

require_once '../../loader.php';

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
    public $bootstrap = '../../../application/bootstrap.php';

    public function testIndexAction()
    {
        $this->dispatch('/index');
        $this->assertController('index');
        $this->assertAction('index');
    }

}

وهذا كل شيء! إذا كان الملف الخاص بي التمهيد بالفعل المساعد، وهذا قد يكون قليلا أكثر تعقيدا، ولكن لأنها ليست، انها السوبر سهلة.

نصائح أخرى

وبدلا من استخدام

require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

وتغييره الى

require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

وregisterAutoLoad () تم إهمال اعتبارا من 1.8.0

وأنا دائما استخدام TestHelper.php بسيط أن يفعل بعض الاشياء التهيئة الأساسية. يتم تضمين هذا الملف في كل ملف اختبار على حدة. واحدة من الاشياء التي اقوم، وتسجيل الملقم الآلي الإطار زند وأنا واجهت مشاكل التبعية الكبرى وخاصة عند استخدام الفلاتر والمصادقون والأشكال. انه من المستحيل تقريبا تتبع كل الملفات المطلوبة، وتدرجها يدويا في-حالات الاختبار.

ويمكنك ربما نقل التهيئة autoloading والإعداد لتضمين مسارات إلى المساعد إلباس الحذاء الخاص بك وهذا الإجراء يجب أن يكون الشيء نفسه بالنسبة للتطبيق الحقيقي.

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