2010-11-24 6 views
4

Sehr geehrte stackoverflowers, Wir entwickeln eine Web-Anwendung basierend auf CakePHP. CakePHP erweist sich als etwas schwierig zu verwenden in TDD-Art und deshalb haben wir versucht, die geringste Menge an Code zu entwickeln, die auf dem Framework selbst möglich ist, indem alle Geschäftslogik in Klassen extrahiert wird, die nicht von CakePHP abhängig sind. Daher können wir unsere Bibliotheken mit phpunit mit minimalen Problemen testen. Wir möchten jedoch den ungeprüften Code in unserem Deckungsbericht enthalten, um die Menge an Leimcode zwischen Kuchen und unseren Bibliotheken, die wir nicht testen können, im Auge zu behalten. Das Problem ist dann, dass, wenn phpunit phpunit erklärt wird, um diesen Code zu berücksichtigen, es verrückt wird, den Code von cake php zu analysieren und auszuführen, und es bricht kläglich. Meine Frage ist: Warum führt phpunit diesen Code überhaupt aus? Gibt es etwas, was wir hier nicht verstehen oder falsch machen? Hier ist die phpunit.xml Datei, die wir verwenden:Warum PHPUnit Code beim Generieren von Deckungsberichten ausführt?

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

Vielen Dank für jede Hilfe.

Antwort

3

Sie müssen die CakePHP-Dateien zum blacklist hinzufügen. Sie sollten diese in der Lage sein, in der XML-Konfigurationsdatei zu tun:

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

Es sind weitere Informationen here

+1

Danke timmow. Ich habe das gemacht und es hat gut funktioniert. Das wichtigste Detail ist jedoch, dass der Pfad relativ zum Testverzeichnis und nicht zum Stamm der Codebasis ist, von der aus der Ameisenbau läuft. Dies ist ein undokumentiertes Detail, das mich retten könnte !! – edovale

0

Warum phpunit bei all diesen Code ausführt?

Es tut dies, weil es Informationen über die Klassen, Methoden und Funktionen benötigt, die ebenfalls nicht behandelt werden. Sie enthält die gefundenen Dateien und verwendet Reflection, um alle Informationen zu den Klassen zu ermitteln. Das ist einfacher als das manuelle Analysieren und Analysieren der parsed tokens einer PHP-Datei.