使用testdox-html生成日志文件时,显示的结果只是测试方法的名称,如果失败则通过文本进行,如果通过则为正常。我想要的是testdox文件生成错误信息,就像命令行输出一样。这有可能吗?
答案 0 :(得分:8)
创建HTML的代码位于PHPUnit/Util/TestDox/ResultPrinter/HTML.php
,遗憾的是我不知道如何扩展它。你可以改变它,但是你必须为每一个可能令人讨厌的更新重复这一点。
由于输出相当小,我会走另一条道路:
我使用.xml文件phpunit输出(例如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);
}
}
phpunit --log-junit foo.xml DemoTest.php
<?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 <boolean:false> is true.
/home/edo/DemoTest.php:10
</i>
</li>
</ul>
</body>
</html>
它应该很容易调整,因为你可以使用xml文件中的所有值,比如每个测试的运行时等等。
您可以使用DomParser,只需修改PHPUnit类或者其他人有更快的想法:)