单元测试 - 一般
FuelPHP 以自动测试的想法建成,并且基于 PHPUnit 测试框架来包含测试和测试类别。
单元测试是什幺?
单元测试是被写来确保程式码单元(通常是一个函式或方法)是否有执行它原设计行为的自动测试。 这些测试也帮助开发者确保他们对系统所作的任何变更,不会破坏原有运作中的任何东西。 单元测试也是测试驱动开发(TDD)学问的关键原动力。
PHPUnit
你将需要本地安装的 PHPUnit,如果你想要传送给 FuelPHP 运行测试,并且想要使用 Oil 来运行你的测试的话。 如果你还没安装好 PHPUnit,请参考 PHPUnit 安装文件:http://www.phpunit.de/manual/current/en/installation.html。
如果你对使用 FuelPHP 运行单元测试不感兴趣,你就没有必要安装 PHPUnit。
执行单元测试
FuelPHP 包含的命令列实用工具已经被配置来运行你的单元测试。 你可以从命令列使用 Oil 命令列实用工具,来运行所有在你 FuelPHP 专案中的测试:
$ php oil test
Tests Running...This may take a few moments.
PHPUnit 3.6.10 by Sebastian Bergmann.
Configuration read from /home/user/sites/example/fuel/core/phpunit.xml
............................................................... 63 / 251 ( 25%)
............................................................... 126 / 251 ( 50%)
............................................................... 189 / 251 ( 75%)
..............................................................
Time: 6 seconds, Memory: 22.25Mb
OK (251 tests, 206 assertions)
建立单元测试
在 FuelPHP,测试位于 fuel/app/tests 目录及其子目录。 如果此目录不存在,前去建立它。 依照惯例,测试档案被放在之于 fuel/app/tests 的子路径会与被测试类别之于 fuel/app/classes 的相同,所以一个对 fuel/app/classes/model/login.php 类别的测试会在 fuel/app/tests/model/login.php。
测试是扩充 TestCase 的类别。 TestCase 是 FuelPHP 对 PHPUnit 的 PHPUnit_Framework_TestCase 类别的扩充,这样你将可以在你的测试中使用所有常见的 PHPUnit 主张(assertion)和方法。 依照惯例,测试类别在它们要测试的类别之后被命名,以 Test_ 前缀,所以一个测试 Model_Login 的类别会被命名为 Test_Model_Login。
class Test_Model_Login extends TestCase
{
public function test_foo()
{
}
}
你可以在 PHPUnit 文件找到更进一步关于撰写测试的资讯:http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html。
测试群组
如果你在开发阶段只想运行测试的子群集,你可以使用测试群组。 运行 php oil test
带着 --group=
命令开关。
$ php oil test --group=App
此命令将只运行 'App' 群组的测试。 你可以对文件区块的 @group 属性指派一个测试类别为一个或更多群组。
/**
* @group App
* @group Login
*/
class Test_Model_Login extends TestCase
{
public function test_foo()
{
}
}
进阶配置
如果你需要自订 phpunit.xml 档案的内容,複製 fuel/core/phpunit.xml 到 fuel/app 目录中。 FuelPHP 将识别你的新配置档案代替在 fuel/core 的旧档案。
为模组单元测试
如果你正在用 FuelPHP 开发大型系统,建议作法是在模组开发。 但因为模组路径试可配置的,模组路径必须被配置在 phpunit.xml 让测试可被识别及运行。 例如,如果你正在 fuel/app/modules 开发模组,你会想要添加此测试套件到你的 phpunit 配置:
<testsuite name="modules">
<directory suffix=".php">../app/modules/*/tests</directory>
</testsuite>
在一个改名的 fuel/ 目录中测试
如果你已经把你的 fuel 目录改为其他名称,设定在 phpunit.xml 档案中的系统变数(文件根目录、核心路径等。) 虽然在你根目录的 Oil 指令码变更路径将有助于其他 Oil 命令,PHPUnit 载入它自己的环境,因此一个改名的 fuel 目录将破坏测试。 要修正这个问题,编辑在你的 app/ 目录中的 phpunit.xml 副本,并更新伺服器变数路径来反映你的新档案结构。