单元测试
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 副本,并更新伺服器變数路徑來反映你的新档案結構。