PHPUnit正在标记一些不具备测试覆盖率的类作为" n / a"但结果是代码覆盖百分比被夸大了,因为它们的行不被计算。
这些课程被揭开,所以我希望他们这样对待。
我如何实现这一目标?
PHPUnit配置:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="tests/bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="true">
<testsuites>
<testsuite name="Application Test Suite">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./src</directory>
</whitelist>
</filter>
<logging>
<log type="coverage-html"
target="./tests/log/report"
charset="UTF-8"
yui="true"
hightlight="true"
lowupperbound="50"
highlowerbound="80" />
</logging>
</phpunit>
输出:
EventApi类有3个方法和40行。
答案 0 :(得分:0)
不确定,但您可以尝试使用过滤器吗?
<whitelist>
<directory>./src</directory>
</whitelist>
答案 1 :(得分:-1)
PHP_CodeCoverage
基于xdebug
/ phpdbg
,它只能跟踪实际执行的代码行,并且他们不知道导致执行的测试用例。如果这个类在另一个测试中使用而你没有模仿它们,那么PHPUnit认为它们被覆盖了。如果这个类在另一个测试中使用而你没有模仿它们,那么PHPUnit认为它们被覆盖了。
来自manual:
PHP_CodeCoverage仅考虑覆盖其所有可执行行时所涵盖的函数或方法。 PHP_CodeCoverage只考虑涵盖其所有方法时所涵盖的类或特征。
因此,即使没有对课程进行任何直接测试,也可能将其标记为已覆盖。如果您只需要测试一个类而不影响其他代码,那么您需要相互模拟。但是在使用静态方法,全局函数等时可能很难。
此外,您可以使用@cover
:
指定涵盖方法
可以在测试代码中使用
@covers
注释(参见表B.1)来指定测试方法要测试的方法。如果提供,则仅考虑指定方法的代码覆盖率信息。