首页 > php教程 > php手册 > 正文

Yaf框架结合PHPUnit的集成测试

php中文网
发布: 2016-06-06 20:11:45
原创
1586人浏览过

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
登录后复制

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

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

立即学习PHP免费学习笔记(深入)”;

测试目录为tests。

phpunit.xml文件

PHPUnit配置文件,内容如下:

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

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');
    }
}
登录后复制

因为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 {
}
登录后复制

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

优六系统_企业网站和微论坛源码5.4.0
优六系统_企业网站和微论坛源码5.4.0

优六系统(全称:优六企服系统)是在Util6MIS基础上组合CMS等插件及子系统的综合信息化管理系统。 Util6MIS(软著全称:优六信息化管理框架系统)是一款免费的通用信息化快速开发框架,该框架可快速集成各类系统开发。 系统后台采用.NET6 + Layui作为UI支撑,操作界面简洁,项目结构清晰,功能模块化设计,支撑框架轻量高效,代码层级分离,注释完整,可快速重构,提高开发效率。

优六系统_企业网站和微论坛源码5.4.0 0
查看详情 优六系统_企业网站和微论坛源码5.4.0

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 {
}
登录后复制

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);
    }
}
登录后复制

测试控制器主要是使用\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);
    }
}
登录后复制

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

小结

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

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

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号