蒙国造博客

yaf框架单元测试

代码目录结构:

项目目录
  application     控制器和视图目录
  configs         ini配置文件目录
  library         Dao、Model、Service层目录
  public          入口文件目录
  tests           单元测试目录
    api           测试用例目录
    bootstrap.php  单元测试初始化文件
  vendor          第三方库(composer)
  composer.json   composer依赖文件
  phpunit.xml     单元测试配置文件

在yaf中做单元测试,主要是测试library下面的库,包括Dao、Model、Service层的测试。

controller层一般通过API功能测试,这个不依赖yaf,所以这里重点讲解服务层的测试。

1 bootstrap.php文件

如下,我们通过这样的类似入口文件的代码,初始化yaf框架,实现对服务层的调用。

<?php
ini_set('error_reporting', E_ALL); // or error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');


define("BASE_PATH", __DIR__ . "/../");
define("APP_PATH", BASE_PATH . "application/");
define("ENV", get_cfg_var('SERVER_ENV'));

include BASE_PATH . 'vendor/autoload.php';

/**
 * Class TestBase
 * 说明:这里我们用了autoload.php,所以YAF的php.ini需设置:yaf.use_spl_autoload=1,
 * 否则会报错:Warning: Yaf_Loader::autoload(): Failed opening script ... No such file or directory
 */

static $application = null;

// 必须实例化Yaf_Application Final类;
// 载入Application必备的配置文件;
// Yaf_Application代表的是一个产品/项目,必须保证单例。
$application = Yaf_Registry::get('Application');
if (!$application) {
    $application = new Yaf_Application(BASE_PATH . "configs/application.ini", ENV);
    $application->bootstrap();

    Yaf_Registry::set('Application', $application);
}

2 phpunit.xml文件

在phpunit.xml中,我们指定启动文件,配置测试目录和文件后缀:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit stderr="true" bootstrap="tests/bootstrap.php" backupGlobals="false">
    <testsuites>
        <testsuite name="API Test Suite">
            <directory suffix=".php">./tests/api/</directory>
        </testsuite>
    </testsuites>
 </phpunit>

这样我们在tests/下的测试用例都可以直接调用yaf的组件,以及所有的library下的类了。

3 开始测试

./vendor/phpunit/phpunit/phpunit

退出移动版