Use unittest in Phalcon

Source: Internet
Author: User

The Phalcon framework itself is not integrated with unittest

The native phpunittest is somewhat complicated. To make it easier to develop the unittest component of Ci, the following method is used to add this component.

1. Copy the following text to the components folder (add it if it does not exist ).

<?phpnamespace components;/** * CodeIgniter * UnitTest.php * An open source application development framework for PHP 5.1.6 or newer * * @package CodeIgniter * @author ExpressionEngine Dev Team * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. * @license http://codeigniter.com/user_guide/license.html * @link http://codeigniter.com * @since Version 1.3.1 * @filesource * */// ------------------------------------------------------------------------/** * Unit Testing Class * * Simple testing class * * @package CodeIgniter * @subpackage Libraries * @category UnitTesting * @author ExpressionEngine Dev Team * @link http://codeigniter.com/user_guide/libraries/uri.html */class UnitTest implements \Phalcon\DI\InjectionAwareInterface{    var $active = TRUE;    var $results = array();    var $strict = FALSE;    var $_template = NULL;    var $_template_rows = NULL;    var $_test_items_visible = array();    protected $_arrLangUnitTest = NULL;    protected $_di;    public function __construct()    {        // These are the default items visible when a test is run.        $this->_test_items_visible = array(            'test_name',            'test_datatype',            'res_datatype',            'result',            'file',            'line',            'notes'        );                $this->loadLanguage();        // log_message('debug', "Unit Testing Class Initialized");    }        // --------------------------------------------------------------------        /**     * Run the tests     *     * Runs the supplied tests     *     * @access public     * @param     *            array     * @return void     */    function set_test_items( $items = array() )    {        if( ! empty($items) and is_array($items) ) {            $this->_test_items_visible = $items;        }    }    function loadLanguage()    {        if( ! $this->_arrLangUnitTest ) {            $this->_arrLangUnitTest = include APP_PATH . 'language/unit_test_lang.php';        }                return $this->_arrLangUnitTest;    }    function getLine( $line = '' )    {        $value = ($line == '' or ! isset($this->_arrLangUnitTest[$line])) ? FALSE : $this->_arrLangUnitTest[$line];                return $value;    }    // --------------------------------------------------------------------        /**     * Run the tests     *     * Runs the supplied tests     *     * @access public     * @param     *            mixed     * @param     *            mixed     * @param     *            string     * @return string     */    function run( $test, $expected = TRUE, $test_name = 'undefined', $notes = '' )    {        if( $this->active == FALSE ) {            return FALSE;        }                if( in_array($expected, array(            'is_object',            'is_string',            'is_bool',            'is_true',            'is_false',            'is_int',            'is_numeric',            'is_float',            'is_double',            'is_array',            'is_null'        ), TRUE) ) {            $expected = str_replace('is_float', 'is_double', $expected);            $result = ($expected($test)) ? TRUE : FALSE;            $extype = str_replace(array(                'true',                'false'            ), 'bool', str_replace('is_', '', $expected));        }        else {            if( $this->strict == TRUE )                $result = ($test === $expected) ? TRUE : FALSE;            else                $result = ($test == $expected) ? TRUE : FALSE;                        $extype = gettype($expected);        }                $back = $this->_backtrace();                $report[] = array(            'test_name' => $test_name,            'test_datatype' => gettype($test),            'res_datatype' => $extype,            'result' => ($result === TRUE) ? 'passed' : 'failed',            'file' => $back['file'],            'line' => $back['line'],            'notes' => $notes        );                $this->results[] = $report;                return ($this->report($this->result($report)));    }        // --------------------------------------------------------------------        /**     * Generate a report     *     * Displays a table with the test data     *     * @access public     * @return string     */    function report( $result = array() )    {        if( count($result) == 0 ) {            $result = $this->result();        }                $this->_parse_template();                $r = '';        foreach( $result as $res ) {            $table = '';                        foreach( $res as $key => $val ) {                if( $key == $this->getLine( 'ut_result' ) ) {                    if( $val == $this->getLine( 'ut_passed' ) ) {                        $val = '<span style="color: #0C0;">' . $val . '</span>';                    }                    elseif( $val == $this->getLine( 'ut_failed' ) ) {                        $val = '<span style="color: #C00;">' . $val . '</span>';                    }                }                                $temp = $this->_template_rows;                $temp = str_replace('{item}', $key, $temp);                $temp = str_replace('{result}', $val, $temp);                $table .= $temp;            }                        $r .= str_replace('{rows}', $table, $this->_template);        }                return $r;    }        // --------------------------------------------------------------------        /**     * Use strict comparison     *     * Causes the evaluation to use === rather than ==     *     * @access public     * @param     *            bool     * @return null     */    function use_strict( $state = TRUE )    {        $this->strict = ($state == FALSE) ? FALSE : TRUE;    }        // --------------------------------------------------------------------        /**     * Make Unit testing active     *     * Enables/disables unit testing     *     * @access public     * @param     *            bool     * @return null     */    function active( $state = TRUE )    {        $this->active = ($state == FALSE) ? FALSE : TRUE;    }        // --------------------------------------------------------------------        /**     * Result Array     *     * Returns the raw result data     *     * @access public     * @return array     */    function result( $results = array() )    {        // $CI =& get_instance();        // $CI->load->language('unit_test');        if( count($results) == 0 ) {            $results = $this->results;        }                        $retval = array();        foreach( $results as $result ) {            $temp = array();            foreach( $result as $key => $val ) {                if( ! in_array($key, $this->_test_items_visible) ) {                    continue;                }                                if( is_array($val) ) {                    foreach( $val as $k => $v ) {                        if( FALSE !== ($line = $this->getLine( strtolower('ut_' . $v) )) ) {                            $v = $line;                        }                        $temp[$this->getLine( 'ut_' . $k )] = $v;                    }                }                else {                    if( FALSE !== ($line = $this->getLine( strtolower('ut_' . $val))) ) {                        $val = $line;                    }                    $temp[$this->getLine( 'ut_' . $key )] = $val;                }            }                        $retval[] = $temp;        }                return $retval;    }        // --------------------------------------------------------------------        /**     * Set the template     *     * This lets us set the template to be used to display results     *     * @access public     * @param     *            string     * @return void     */    function set_template( $template )    {        $this->_template = $template;    }        // --------------------------------------------------------------------        /**     * Generate a backtrace     *     * This lets us show file names and line numbers     *     * @access private     * @return array     */    function _backtrace()    {        if( function_exists('debug_backtrace') ) {            $back = debug_backtrace();                        $file = (! isset($back['1']['file'])) ? '' : $back['1']['file'];            $line = (! isset($back['1']['line'])) ? '' : $back['1']['line'];                        return array(                'file' => $file,                'line' => $line            );        }        return array(            'file' => 'Unknown',            'line' => 'Unknown'        );    }        // --------------------------------------------------------------------        /**     * Get Default Template     *     * @access private     * @return string     */    function _default_template()    {        $this->_template = "\n" . '<table style="width:100%; font-size:small; margin:10px 0; border-collapse:collapse; border:1px solid #CCC;">';        $this->_template .= '{rows}';        $this->_template .= "\n" . '</table>';                $this->_template_rows = "\n\t" . '<tr>';        $this->_template_rows .= "\n\t\t" . '<th style="text-align: left; border-bottom:1px solid #CCC;">{item}</th>';        $this->_template_rows .= "\n\t\t" . '<td style="border-bottom:1px solid #CCC;">{result}</td>';        $this->_template_rows .= "\n\t" . '</tr>';    }        // --------------------------------------------------------------------        /**     * Parse Template     *     * Harvests the data within the template {pseudo-variables}     *     * @access private     * @return void     */    function _parse_template()    {        if( ! is_null($this->_template_rows) ) {            return;        }                if( is_null($this->_template) ) {            $this->_default_template();            return;        }                if( ! preg_match("/\{rows\}(.*?)\{\/rows\}/si", $this->_template, $match) ) {            $this->_default_template();            return;        }                $this->_template_rows = $match['1'];        $this->_template = str_replace($match['0'], '{rows}', $this->_template);    }    /*     * (non-PHPdoc) @see \Phalcon\DI\InjectionAwareInterface::setDI()     */    public function setDI( $dependencyInjector )    {        $this->_di = $dependencyInjector;    }        /*     * (non-PHPdoc) @see \Phalcon\DI\InjectionAwareInterface::getDI()     */    public function getDI()    {        return $this->_di;    }}// END Unit_test Class/** * Helper functions to test boolean true/false * * * @access private * @return bool */function is_true( $test ){    return (is_bool($test) and $test === TRUE) ? TRUE : FALSE;}function is_false( $test ){    return (is_bool($test) and $test === FALSE) ? TRUE : FALSE;}/* End of file Unit_test.php *//* Location: ./system/libraries/Unit_test.php */

Add the following file to the app/language Folder:

<?php$langUnitTest['ut_test_name']= 'Test Name';$langUnitTest['ut_test_datatype']= 'Test Datatype';$langUnitTest['ut_res_datatype']= 'Expected Datatype';$langUnitTest['ut_result']= 'Result';$langUnitTest['ut_undefined']= 'Undefined Test Name';$langUnitTest['ut_file']= 'File Name';$langUnitTest['ut_line']= 'Line Number';$langUnitTest['ut_passed']= 'Passed';$langUnitTest['ut_failed']= 'Failed';$langUnitTest['ut_boolean']= 'Boolean';$langUnitTest['ut_integer']= 'Integer';$langUnitTest['ut_float']= 'Float';$langUnitTest['ut_double']= 'Float'; // can be the same as float$langUnitTest['ut_string']= 'String';$langUnitTest['ut_array']= 'Array';$langUnitTest['ut_object']= 'Object';$langUnitTest['ut_resource']= 'Resource';$langUnitTest['ut_null']= 'Null';$langUnitTest['ut_notes']= 'Notes';return $langUnitTest;/* End of file unit_test_lang.php *//* Location: ./system/language/english/unit_test_lang.php */

3. register the namespace conponents => app_path. 'components /';


4. Test whether it is correct.


<?php
//UTestController.php
namespace controllers;class UTestController extends \Phalcon\Mvc\Controller{    public function indexAction()    {        echo $this->utest->run('abc', 'abc');                echo $this->utest->run('1+1', '2');    }}?>




OK
In this example, we can easily use unittest in Phalcon.

Use unittest in Phalcon

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.