Home > php教程 > php手册 > Yaf框架结合PHPUnit的集成测试

Yaf框架结合PHPUnit的集成测试

WBOY
Release: 2016-06-06 20:11:45
Original
1244 people have browsed it

Yaf,全称 Yet Another Framework,是一个C语言编写的PHP框架。自从接触Yaf以来也快1年了,Yaf的性能确实非常不错,但是相应的资料比较少。一直想把PHPUnit使用在Yaf上,网上搜了一圈这方面的资料非常非常少。于是自己折腾了下这个,初步处理了一下关于控制

Yaf,全称 Yet Another Framework,是一个C语言编写的PHP框架。自从接触Yaf以来也快1年了,Yaf的性能确实非常不错,但是相应的资料比较少。一直想把PHPUnit使用在Yaf上,网上搜了一圈这方面的资料非常非常少。于是自己折腾了下这个,初步处理了一下关于控制器(controller)和模型(model)的测试。

代码可以直接在github下载:https://github.com/chenjiebin/yaf-phpunit-test/

先报下运行环境:

PHP:5.3.13或者5.4.16
Yaf:2.2.9
phpunit:3.7.29
Copy after login

在php 5.3.13和5.4.16下都没有发现问题,Yaf扩展要注意下载相应的版本。

下面说明下相关文件和代码。

测试目录为tests。

phpunit.xml文件

PHPUnit配置文件,内容如下:

表示测试执行时从bootstrap.php开始引导。
bootstrap.php文件
测试执行的引导文件,声明常量等一些全局配置都可以在这里做。内容如下:
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../'));
Copy after login

application\library\Test\PHPUnit\TestCase.php文件
自定义的测试基类文件,控制器和模型的测试类都继承该类。代码如下:

namespace Test\PHPUnit;
/**
 * 测试基类
 */
class TestCase extends \PHPUnit_Framework_TestCase {
    /**
     * yaf运行实例
     *
     * @var \Yaf\Application
     */
    protected $_application = null;
    /**
     * 构造方法,初始化yaf运行实例
     */
    public function __construct() {
        $this->_application = $this->getApplication();
        parent::__construct();
    }
    /**
     * 设置application
     */
    public function setApplication() {
        $application = new \Yaf\Application(APPLICATION_PATH . "/conf/application.ini");
        $application->bootstrap();
        \Yaf\Registry::set('application', $application);
    }
    /**
     * 获取application
     *
     * @return \Yaf\Application
     */
    public function getApplication() {
        $application = \Yaf\Registry::get('application');
        if (!$application) {
            $this->setApplication();
        }
        return \Yaf\Registry::get('application');
    }
}
Copy after login

因为Yaf在运行的时候,全局只能实例化一次,所以在初始化Yaf运行实例后,就保存到Yaf的注册表里避免多次实例化。此外在构造方法里就调用初始化Yaf运行实例的方法,是为了在数据模型的测试中,可以直接new出相应的数据模型,而不用导入相关的文件。

application\library\Test\PHPUnit\ControllerTestCase.php文件

控制器测试基类,控制器的测试类都继承该类。内容如下:

namespace Test\PHPUnit;
require_once APPLICATION_PATH . '/tests/application/library/Test/PHPUnit/TestCase.php';
/**
 * 控制器测试基类
 */
class ControllerTestCase extends \Test\PHPUnit\TestCase {
}
Copy after login

暂时没有代码,为将来扩展预留。

application\library\Test\PHPUnit\ModelTestCase.php文件

模型测试基类,模型的测试类都继承该类。内容如下:

namespace Test\PHPUnit;
require_once APPLICATION_PATH . '/tests/application/library/Test/PHPUnit/TestCase.php';
/**
 * 数据模型测试基类
 */
class ModelTestCase extends \Test\PHPUnit\TestCase {
}
Copy after login

application\controllers\IndexTest.php首页控制器测试文件

控制器测试示例文件,内容如下:

require_once APPLICATION_PATH . '/tests/application/library/Test/PHPUnit/ControllerTestCase.php';
/**
 * 首页控制器测试类
 */
class IndexTest extends \Test\PHPUnit\ControllerTestCase {
    /**
     * 测试index方法
     */
    public function testIndex() {
        $request = new \Yaf\Request\Simple("CLI", "Index", "Index", 'index');
        $response = $this->_application->getDispatcher()
                ->returnResponse(true)
                ->dispatch($request);
        $content = $response->getBody();
        $this->assertEquals('index phtml', $content);
    }
}
Copy after login

测试控制器主要是使用\Yaf\Request\Simple类,设定参数为CLI则为命令行运行。

application\controllers\models\UserTest.php模型测试文件

数据模型测试文件,内容如下:

require_once APPLICATION_PATH . '/tests/application/library/Test/PHPUnit/ModelTestCase.php';
class UserTest extends \Test\PHPUnit\ModelTestCase {
    public function testGetUserName() {
        $model = new \UserModel();
        $userId = 1;
        $result = $model->getUserName($userId);
        $this->assertEquals('iceup', $result);
        $userId = 100;
        $result = $model->getUserName($userId);
        $this->assertFalse($result);
    }
}
Copy after login

这里可以直接new \UserModel()出来,因为在测试基类的构造方法里已经初始化了Yaf运行实例。

小结

执行测试的时候一般最头疼的是文件的自动加载问题,基本上只要解决了这个问题,剩下都比较容易处理了。目前在项目的运用中碰到一些实际的问题,比如输出json格式的数据,抛出异常,post传参等,以后会陆续补上相应的解决方式。

转载请注明:快乐编程 » Yaf框架结合PHPUnit的集成测试

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template