为什么PHPUnit在生成覆盖率报告时执行代码?

时间:2010-11-24 03:47:36

标签: php tdd phpunit code-coverage cakephp-1.3

亲爱的stackoverflowers, 我们正在开发基于cakephp的Web应用程序。 CakePHP在TDD方式中有点难以使用,因此我们试图通过将所有业务逻辑提取到不依赖于cakephp的类来自己在框架上开发尽可能少的代码。因此,我们能够使用phpunit测试我们的库,只需要很少的问题。但是,我们确实希望在我们的覆盖率报告中包含未经测试的代码,以便密切关注蛋糕和我们无法测试的库之间的胶水代码量。问题是,当告诉phpunit考虑这些代码时,它会疯狂地解析并执行cakephp的代码并且它会惨遭打破。 我的问题是:为什么phpunit会执行这个代码?我们在这里有什么不理解或做错的事吗? 这是我们正在使用的phpunit.xml文件:

<?xml version="1.0" encoding="utf-8" ?>

<phpunit backupGlobals="true"
         backupStaticAttributes="false"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false"
         testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader">
  <filter>
    <whitelist addUncoveredFilesFromWhitelist="true">
      <directory suffix=".php">app</directory>
      <exclude>
        <directory suffix=".php">tests</directory>
        <directory suffix=".php">app/webroot</directory>
        <directory suffix=".php">app/plugins</directory>
        <directory suffix=".php">app/vendors</directory>
        <directory suffix=".php">app/config</directory>
        <directory suffix=".php">app/tmp</directory>
        <directory suffix=".php">cake</directory>
        <directory suffix=".php">vendors</directory>
      </exclude>
    </whitelist>
  </filter>
</phpunit>

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您需要将cakephp文件添加到blacklist。您应该可以在xml配置文件中执行此操作:

<filter>
  <blacklist>
    <directory suffix=".php">/path/to/files</directory>
    <file>/path/to/file</file>
    <exclude>
      <directory suffix=".php">/path/to/files</directory>
      <file>/path/to/file</file>
    </exclude>
  </blacklist>
</filter>

还有更多信息here

答案 1 :(得分:0)

  

为什么phpunit会执行这个代码呢?

这样做是因为它需要获取有关未涵盖的类,方法和函数的信息。它包含它找到的文件,并使用Reflection来发现有关类的所有信息。这比手动解析和分析PHP文件的parsed tokens更容易。