Jenkins PhpUnit - 代码覆盖问题

时间:2014-12-11 10:32:54

标签: php jenkins phpunit code-coverage

我在一个有多个Class和方法的项目上工作,我想使用 PhpUnit 来测试每个案例,并防止出现名为 Jenkins 的工具的问题。 (服务器监控)

此工具的目的是查看代码覆盖率。我可以看到PhpUnit在测试套件中去了哪里。

但我不认为CodeCoverage 在我的类和方法中无处不在

示例:

Class Class1Test {
    Public method1 ( $inputs )  {
        $var = Class3::setVar();
        Return Class2 :: Method1 ( $inputs, $var ) ;
    }
} 

Class Class2 {
    Public static method2 ( $inputs, $var ) {
        Echo ‘’ hi there ! $inputs ‘’ ;
    }
}

所以当我用PhpUnit进行测试时:

Class Test extends PhpUnit… {
    …
    testmethod2( ) {
        $this->assertNotEmpty( $inputs ) ;
    }
}

codeCoverage 不包括我在CodeCoverage中的Class2:Method1。 当然,这是一个小例子,在我的项目中,我得到了更多的类和方法的重叠,CodeCoverage只覆盖了测试文件中调用的类和方法。

有没有办法通过一次测试来考虑我的所有方法?

非常感谢你糊状的帮助。

编辑***

这是我的phpunit.xml:

<phpunit
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/3.7/phpunit.xsd"
    backupGlobals="false"
    backupStaticAttributes="false"
    bootstrap="src/TJS/bootstrap.php"
    cacheTokens="true"
    colors="true"

    convertErrorsToExceptions="true"
    convertWarningsToExceptions="true"
    convertNoticesToExceptions="false"

    forceCoversAnnotation="false"
    mapTestClassNameToCoveredClassName="false"
    printerClass="PHPUnit_TextUI_ResultPrinter"

    processIsolation="false"
    stopOnError="false"
    stopOnFailure="false"
    stopOnIncomplete="false"
    stopOnSkipped="false"
    strict="false"
    verbose="true"

    checkForUnintentionallyCoveredCode="false"
    >

    <testsuites>
        <testsuite name="TJS">
            <directory suffix="Test.php">src/TJS/_tests_unit/classes/</directory>
            <!--<directory suffix="Test.php">tests/integration/</directory>-->
        </testsuite>
    </testsuites>        

    <filter>
        <whitelist addUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">src/TJS/classes</directory>        
        </whitelist>
    </filter>        


    <logging>
        <log type="coverage-html" target="build/coverage"/>
        <log type="coverage-crap4j" target="build/logs/crap4j.xml"/>
        <log type="coverage-clover" target="build/logs/clover.xml"/>
        <log type="junit" target="build/logs/junit.xml" logIncompleteSkipped="false"  />
    </logging> 
</phpunit> 

1 个答案:

答案 0 :(得分:1)

您没有调用这些方法,因此没有覆盖范围。 但我想我知道你的意思。默认情况下,代码覆盖率报告不包含任何没有执行的类,因此您不会在覆盖率报告中显示它们,并且您的覆盖率百分比似乎更高。要修复此问题,请在phpunit.xml中添加

<filter>
      <whitelist addUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">../app</directory>
      </whitelist>
</filter>

(这假设您的应用程序位于./app并且您的phpunit.xml位于./tests中)