PHPUnit 預置了一個純文字型式的 TextUI Runner,在大多數情形下,它足夠應付我們的需求。不過,當我想要把 TestSuite 放到專案網頁上,讓小組成員 - 特別是 PM - 可以上網查看立即的測試結果時,那個文字型式的 TextUI Runner 就顯得太簡略了。至少要把測試工作及結果輸出成 HTML 的條列式清單,最好還加上顏色區別成功或失敗。
所幸 PHPUnit 提供了良好的擴充性,要自定一個可以將測試內容輸出為 HTML 網頁的 HTML Runner 相當簡單。
PHPUnit 預置了一個純文字型式的 TextUI Runner,在大多數情形下,它足夠應付我們的需求。不過,當我想要把 TestSuite 放到專案網頁上,讓小組成員 - 特別是 PM - 可以上網查看立即的測試結果時,那個文字型式的 TextUI Runner 就顯得太簡略了。至少要把測試工作及結果輸出成 HTML 的條列式清單,最好還加上顏色區別成功或失敗。
所幸 PHPUnit 提供了良好的擴充性,要自定一個可以將測試內容輸出為 HTML 網頁的 HTML Runner 相當簡單。
自定輸出樣式的方法很多,我選擇透過擴展 PHPUnit_Framework_TestListener 來實現。See also: Implement PHPUnit_Framework_TestListener.
另一方面,我將測試案例清單放置在另一個檔案中。在本例中,測試案例清單之文件名稱為 UnitTestSuiteList.php。
Start. Timestamp:', date('Y-m-d h:i:s'), '
'; $suite->run($result); echo '';
if ($result->wasSuccessful() &&
$result->allCompletlyImplemented() &&
$result->noneSkipped())
{
printf(
"\nOK (%d test%s)\n",
count($result),
(count($result) == 1) ? '' : 's'
);
}
else if ((!$result->allCompletlyImplemented() ||
!$result->noneSkipped())&&
$result->wasSuccessful())
{
printf(
"\nOK, but incomplete or skipped tests!\n" .
" Tests: %d \n Incomplete: %s \n Skipped: %s.\n",
count($result),
$result->notImplementedCount(),
$result->skippedCount()
);
}
else
{
printf(
"\nFAILURES!\n" .
" Tests: %d \n Failures: %s \n Errors: %s \n Incomplete: %s \n Skipped: %s.\n",
count($result),
$result->failureCount(),
$result->errorCount(),
$result->notImplementedCount(),
$result->skippedCount()
);
}
echo 'End. Timestamp:', date('Y-m-d h:i:s'), '
'; ?>