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).

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