Как получить подробную информацию о тестировании из PHPUnit testdox - PullRequest
8 голосов
/ 19 января 2011

При создании файла журнала с использованием testdox-html показанные результаты являются просто названиями методов тестирования, которые либо вычеркиваются по тексту, если не выполняются, либо нормально, если проходят. Я хотел бы, чтобы файл testdox генерировал информацию об ошибке, очень похожую на вывод командной строки. Это вообще возможно?

1 Ответ

9 голосов
/ 20 января 2011

Код, который создает HTML, находится в PHPUnit/Util/TestDox/ResultPrinter/HTML.php, и, к сожалению, я не знаю, как его расширить. Вы можете просто изменить его, но тогда вам придется повторять это для каждого обновления, которое может раздражать.

Так как результат в любом случае довольно мал, я бы пошел другим путем:

Я бы использовал вывод phpunit файла .xml (например, phpunit --log-junit foo.xml DemoTest.php) и использовал xslt или анализатор dom для преобразования вывода в html. Это не должно быть много работы, и вы можете настроить его очень быстро.

Я написал небольшой пример использования xslt для преобразования вывода.

Тест

<?php

class DemoTest extends PHPUnit_Framework_TestCase {

    public function testPass() {
        $this->assertTrue(true);
    }

    public function testFail() {
        $this->assertTrue(false);
    }

}

Создать вывод xml

phpunit --log-junit foo.xml DemoTest.php

Шаблон xslt

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
    <h1>Tests</h1>
      <xsl:for-each select="testsuites/testsuite">
        <h2><xsl:value-of select="@name"/></h2>
        <ul>
        <xsl:for-each select="testcase">
          <li>
            <xsl:value-of select="@name"/>
            <xsl:if test="failure">
                <b>Failed !</b>
                <i><xsl:value-of select="*"/></i>
            </xsl:if>
          </li>
        </xsl:for-each>
        </ul>
      </xsl:for-each>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

Преобразование вывода

xsltproc foo.xsl foo.xml > output.html

Как это выглядит

<html>
<body>
  <h1>Tests</h1>
    <h2>DemoTest</h2>
      <ul>
        <li>testPass</li>
        <li>testFail<b>Failed !</b>
          <i>DemoTest::testFail
          Failed asserting that &lt;boolean:false&gt; is true.
          /home/edo/DemoTest.php:10
          </i>
       </li>
      </ul>
</body>
</html>

и это должно быть легко адаптировано, потому что вы можете использовать все значения в xml-файле, такие как время выполнения каждого теста и т. Д.

Альтернативы

Вы можете использовать DomParser, просто изменить класс PHPUnit или, может быть, у кого-то есть более быстрое представление:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...