Kev*_*vin 8 php testing phpunit
使用testdox-html生成日志文件时,显示的结果只是测试方法的名称,如果失败则通过文本进行,如果通过则为正常.我想要的是testdox文件生成错误信息,就像命令行输出一样.这是可能吗?
创建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);
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
它应该很容易调整,因为你可以使用xml文件中的所有值,如每个测试的运行时等.
您可以使用DomParser,只需修改PHPUnit类或者其他人有更快的想法:)