Прочее
Модификация генератора отчетов тестирования
Стандартный генератор отчетов очень простой. Если вы хотите сделать более яркий вывод, чтобы впечатлить кого-то, то не пугайтесь – генератор отчетов можно легко расширить. Единственная опасность – это то, что вам придется работать с кодом ядра CakePHP, в частности с /cake/tests/libs/cake_reporter.php.
Для изменения вывода отчетов тестирования вам необходимо подменить следующие методы:
paintHeader()
Печатает перед началом теста.
paintPass()
Печатает каждый раз, когда тест пройден. Используйте $this->getTestList() для получения массива информации, относящейся к тесту, и $message для получения результата теста. Помните о вызове parent::paintPass($message).
paintFail()
Печатает каждый раз, когда тестовый пример провалился. Помните о вызове parent::paintFail($message).
paintFooter()
Печатает, когда тест закончился, т.е. когда все тестовые примеры выполнены.
Если во время выполнения 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).
<< Тестирование плагинов |
Локализация и интернационализация >>