So fügen Sie dem PHPUnit Code Coverage-Bericht der Yii-Anwendung nicht aufgedeckte Dateien hinzu

8

Ich versuche derzeit, den Code-Coverage-Bericht für eine PHP-Anwendung zu erhalten, die auf dem Yi-Framework basiert.

Die Codeabdeckung wird von PHPUnit 3.6 generiert, und ich verwende < a href="http://www.phpunit.de/manual/3.6/de/code-coverage-analysis.html#code-coverage-analysis.inclusioning-exclusive-files"> Whitelist-Ansatz für Quelldateien Filterung.

Problem ist, wenn ich die Option addUncoveredFilesFromWhitelist="true" , Code Coverage bricht mit dem folgenden Fehler:

%Vor%

(Es ist interessant, warum es drei fast identische Fehler gibt, anstatt nur eines.) Wenn addUncoveredFilesFromWhitelist="false" code coverage erfolgreich generiert wird, aber natürlich ohne die Dateien, die nicht durch Tests abgedeckt sind.

Dateien des Yii-Frameworks, die im Verzeichnis $HOME/systems/yii/ abgelegt sind.

Anwendung Ich versuche zu decken in der $HOME/projects/$APPNAME/ .

Hier ist mein phpunit.xml :

%Vor%

Ich habe alle Tests im Verzeichnis protected/tests im Katalog der Anwendung abgelegt, wie in Testumgebung einrichten im endgültigen Handbuch zu Yii.

PHPUnit wird wie folgt aufgerufen:

%Vor%

Das Komponententesten selbst läuft reibungslos, nur die Codeabdeckung bricht ab.

Vielleicht sollte ich die Exlude-Liste einrichten, um Verzeichnisse mit Yii-Klassen auszuschließen, aber ich habe etwas Angst vor dieser Erfahrung, denn es gibt Dutzende von Ordnern, Yii ist ein hochmodulares System. Natürlich, wenn es eine einzige Lösung ist ...

EDIT: Also, für die Neugier, sieht die vollständige Lösung so aus:

phpunit.xml

%Vor%

Ersetzen Sie einfach den YIIPATH-Platzhalter durch den echten Pfad zum Yii-Framework.

Es definitiv hat etwas mit CButtonColumn zu tun, aber im Moment benutze ich nur diesen Hack mit includePath und freue mich darüber. Das Entfernen des Hacks bringt diesen ganzen Bug zum Leben.

    
hijarian 05.02.2012, 13:46
quelle

2 Antworten

9

Warum das passiert:

PHPUnit wird require / include alle Dateien in der white-listed , wenn Sie es sagen,% code%.

Wenn diese Dateien ausführbaren Code enthalten, wird dieser ausgeführt und Sie sehen die Ergebnisse der auftretenden Probleme.

Was tun?

  • Alle Dateien mit ausführbarem Code von der Whitelist ausschließen

Es ist ein wenig Ärger, aber es funktioniert

  • Fixiere deine Include-Pfade, damit die Include / Require-Aufrufe nichts kaputt machen

Ich habe keine Ahnung, WARUM diese Fehler auftreten, aber es scheint ein Problem mit dem Include-Pfad zu sein? Der Rahmen sollte eine Lösung bieten, die ich sagen würde.

  • PHPUnit 3.7 bietet einen "generate coverage, aber nicht via include" Modus, der sich die Dateien ansieht und die ausführbaren Zeilen für Sie "rät".
edorian 05.02.2012, 14:20
quelle
3

Der Weiß- und Code-Coverage-Bericht sollte nur die Dateien enthalten, die Sie testen. Angenommen, Sie schreiben keine Tests für das Yii-Framework selbst, entfernen Sie es aus dem Weiß. Dies wird hoffentlich nicht nur das Problem lösen, sondern der Bericht wird viel schneller erstellen.

    
David Harkness 05.02.2012 19:05
quelle

Tags und Links