CakePHP : Manual/CommonTasks/Testing/Miscellaneous

Прочее



Модификация генератора отчетов тестирования


Стандартный генератор отчетов очень простой. Если вы хотите сделать более яркий вывод, чтобы впечатлить кого-то, то не пугайтесь – генератор отчетов можно легко расширить. Единственная опасность – это то, что вам придется работать с кодом ядра 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() > "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("-&gt;"$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 
"-&gt;$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("-&gt;"$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($thisAPP_TEST_CASES DS 'models'); 
  } 

?>


Код, приведенный выше, сгруппирует все тестовые примеры, расположенные в каталоге /app/tests/cases/models/. Для того, чтобы добавить отдельный файл используйте TestManager::addTestFile($this, filename).

<< Тестирование плагинов | Локализация и интернационализация >>