Стандартный генератор отчетов очень простой. Если вы хотите сделать более яркий вывод, чтобы впечатлить кого-то, то не пугайтесь – генератор отчетов можно легко расширить. Единственная опасность – это то, что вам придется работать с кодом ядра CakePHP, в частности с /cake/tests/libs/cake_reporter.php.
Для изменения вывода отчетов тестирования вам необходимо подменить следующие методы:
paintHeader()
Если во время выполнения paintPass и paintFail, вы захотите скрыть «родительский» вывод, то заключите вызов в теги html-комментария, как здесь:
<?echo "\n<!-- ";parent::paintFail($message);echo
" -->\n";?>
Образец модификации cake_reporter.php, который создает таблицу для хранения результатов тестирования:
<?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; }'; }
}
?>
Если вы захотите запустить несколько ваших тестов в одно и тоже время, то вы можете попытаться создать группу тестов. Создайте файл в /app/tests/groups/ и назовите его, например, your_test_group_name.group.php. В этом файле расширьте класс GroupTest и импортируйте тест следующим образом:
<?php class TryGroupTest extends GroupTest { var
$label = 'try'; function
tryGroupTest() {
TestManager::addTestCasesFromDirectory($this, APP_TEST_CASES . DS . 'models'); }
}
?>
Код, приведенный выше, сгруппирует все тестовые примеры, расположенные в каталоге /app/tests/cases/models/. Для того, чтобы добавить отдельный файл используйте TestManager::addTestFile($this, filename).
<< Тестирование плагинов | Локализация и интернационализация >>