2010-11-24 61 views
4

親愛的stackoverflowers, 我們正在開發一個基於cakephp的web應用程序。 CakePHP在TDD方式中使用起來有點難,因此我們試圖通過將所有業務邏輯提取到不依賴於cakephp的類來在自己的框架上開發儘可能少的代碼。因此,我們可以使用phpunit測試我們的庫,而且問題最少。然而,我們確實希望將未經測試的代碼包含在我們的覆蓋報告中,以便更多地關注我們無法測試的Cake和我們的庫之間的膠水代碼量。問題是,當告訴phpunit對這些代碼進行說明時,它會瘋狂地解析並執行cakephp的代碼,並且它慘遭破壞。 我的問題是:爲什麼phpunit完全執行此代碼?我們在這裏沒有理解或做錯嗎? 下面是我們所使用的phpunit.xml文件:爲什麼PHPUnit在生成覆蓋率報告時執行代碼?

<?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> 

感謝您的幫助。

回答

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

謝謝蒂莫。我這樣做,它結束了工作正常。儘管最重要的細節是路徑與測試目錄相關,而不是運行ant構建版本的代碼庫的根目錄。這是一個無證的細節,可以幫我節省我們的時間! – edovale 2011-01-20 04:31:43

0

爲什麼PHPUnit的執行這段代碼呢?

它這樣做是因爲它需要獲取有關未涉及的類,方法和函數的信息。它包含它找到的文件,並使用Reflection來發現有關這些類的所有信息。這比手動解析和分析PHP文件的parsed tokens容易。

相關問題