4.7.11.1 Membuat pelapor ujian
Pelapor Ujian yang biasa adalah sangat minimal. Jika anda mahu output yang lebih baik untuk mengecap orang-orang, jangan risau, ia sebenarnya sangat mudah untuk extend.
Apa yang bahaya cuma anda perlu mengusik dengan kod teras Cake, iaitu /cake/tests/libs/cake_reporter.php.
Untuk menukar output ujian anda boleh tulis balik method dibawah:
- paintHeader()
- Paparkan sebelum ujian bermula.
- paintPass()
- Paparkan setiap kali kes ujian sudah dibuat. Gunakan $this->getTestList() untuk dapatkan satu array infomasi yang berkaitan dengan ujian tersebut, dan $message untuk dapatkan hasil ujian. Jangan lupa untuk memanggil parent::paintPass($message).
- paintFail()
- Paparkan setiap kali kes ujian sudah gagal. Jangan lupa untuk memanggil parent::paintFail($message).
- paintFooter()
- Paparkan apabila ujian sudah tamat, i.e. bila kesemua kes-kes ujian sudah dijalankan.
Kalau, sedang menjalankan paintPass dan paintFail, anda mahu sorokkan output ibunya, tutupkan panggilan didalam komen tag, seperti:
echo "\n<!-- "; parent::paintFail($message); echo " -->\n";
echo "\n<!-- ";parent::paintFail($message);echo " -->\n";
Contoh cake_reporter.php ialah setup yang membuat satu table untuk memegang hasil-hasil ujian seperti berikut:
<?php
/**
* CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
* Copyright 2005-2008, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice.
*/
class CakeHtmlReporter extends HtmlReporter {
function CakeHtmlReporter($characterSet = 'UTF-8') {
parent::HtmlReporter($characterSet);
}
function paintHeader($testName) {
$this->sendNoCacheHeaders();
$baseUrl = BASE;
print "<h2>$testName</h2>\n";
print "<table style=\"\"><th>Res.</th><th>Test case</th><th>Message</th>\n";
flush();
}
function paintFooter($testName) {
$colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : "green");
print "</table>\n";
print "<div style=\"";
print "padding: 8px; margin-top: 1em; background-color: $colour; color: white;";
print "\">";
print $this->getTestCaseProgress() . "/" . $this->getTestCaseCount();
print " test cases complete:\n";
print "<strong>" . $this->getPassCount() . "</strong> passes, ";
print "<strong>" . $this->getFailCount() . "</strong> fails and ";
print "<strong>" . $this->getExceptionCount() . "</strong> exceptions.";
print "</div>\n";
}
function paintPass($message) {
parent::paintPass($message);
echo "<tr>\n\t<td width=\"20\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
print "\t\t<span style=\"color: green;\">Pass</span>: \n";
echo "\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
$breadcrumb = $this->getTestList();
array_shift($breadcrumb);
array_shift($breadcrumb);
print implode("->", $breadcrumb);
echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
$message = split('at \[', $message);
print "->$message[0]<br />\n\n";
echo "\n\t</td>\n</tr>\n\n";
}
function paintFail($message) {
echo "\n<!-- ";
parent::paintFail($message);
echo " -->\n";
echo "<tr>\n\t<td width=\"20\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
print "\t\t<span style=\"color: red;\">Fail</span>: \n";
echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
$breadcrumb = $this->getTestList();
print implode("->", $breadcrumb);
echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";
print "$message";
echo "\n\t</td>\n</tr>\n\n";
}
function _getCss() {
return parent::_getCss() . ' .pass { color: green; }';
}
}
?>
<?php/*** CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>* Copyright 2005-2008, Cake Software Foundation, Inc.* 1785 E. Sahara Avenue, Suite 490-204* Las Vegas, Nevada 89104** Licensed under The Open Group Test Suite License* Redistributions of files must retain the above copyright notice.*/class CakeHtmlReporter extends HtmlReporter {function CakeHtmlReporter($characterSet = 'UTF-8') {parent::HtmlReporter($characterSet);}function paintHeader($testName) {$this->sendNoCacheHeaders();$baseUrl = BASE;print "<h2>$testName</h2>\n";print "<table style=\"\"><th>Res.</th><th>Test case</th><th>Message</th>\n";flush();}function paintFooter($testName) {$colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : "green");print "</table>\n";print "<div style=\"";print "padding: 8px; margin-top: 1em; background-color: $colour; color: white;";print "\">";print $this->getTestCaseProgress() . "/" . $this->getTestCaseCount();print " test cases complete:\n";print "<strong>" . $this->getPassCount() . "</strong> passes, ";print "<strong>" . $this->getFailCount() . "</strong> fails and ";print "<strong>" . $this->getExceptionCount() . "</strong> exceptions.";print "</div>\n";}function paintPass($message) {parent::paintPass($message);echo "<tr>\n\t<td width=\"20\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";print "\t\t<span style=\"color: green;\">Pass</span>: \n";echo "\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";$breadcrumb = $this->getTestList();array_shift($breadcrumb);array_shift($breadcrumb);print implode("->", $breadcrumb);echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";$message = split('at \[', $message);print "->$message[0]<br />\n\n";echo "\n\t</td>\n</tr>\n\n";}function paintFail($message) {echo "\n<!-- ";parent::paintFail($message);echo " -->\n";echo "<tr>\n\t<td width=\"20\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";print "\t\t<span style=\"color: red;\">Fail</span>: \n";echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";$breadcrumb = $this->getTestList();print implode("->", $breadcrumb);echo "\n\t</td>\n\t<td width=\"40%\" style=\"border: dotted 1px; border-top: hidden; border-left: hidden; border-right: hidden\">\n";print "$message";echo "\n\t</td>\n</tr>\n\n";}function _getCss() {return parent::_getCss() . ' .pass { color: green; }';}}?>


























