2012-04-02 6 views
1

Ich habe ein seltsames Problem mit PHPUnit. Ich arbeite an einem Projekt mit einem Team von Entwicklern, die PHPUnit 3.6.5 verwenden müssen. Meistens funktioniert meine PHPUnit sehr gut und liefert die gleichen Ergebnisse wie auf anderen Maschinen der Entwickler. Ich werde jedoch gelegentlich feststellen, dass eine bestimmte Zeile auf meinem Rechner nicht abgedeckt ist, sondern auf anderen Entwicklern. Hier ein aktuelles Szenario:PHPUnit Code Abdeckung enthält nicht bestimmte Zeilen

  • Bob checkt eine neue Datei ein, die er gerade aktualisiert hat. Er stellte sicher, dass der Komponententest für diese Datei bestanden wurde und eine 95% ige Codeabdeckung aufwies. Nach dieser Überprüfung checkt er die Datei ein, wo sie erstellt wird und der Komponententest ausgeführt wird. Wenn der Komponententest auf dem Server fehlschlägt, wird unser Build rot und niemand kann einchecken.
  • Der Server führt den phpunit-Test aus und es besteht.
  • Andere Entwickler, darunter auch ich,
  • Nach meiner eigenen Satz von Änderungen der neuesten von der Perforce-Repository erhalten, führe ich alle der phpunit Tests für die Anwendung, aber ich bemerke eine der Dateien nicht genug haben Codeabdeckung. Es ist die Datei, die Bob gerade eingecheckt hat. Ich überprüfe mit einigen anderen Entwicklern in meinem Team, und die Datei übergibt Code-Coverage ohne Probleme für sie. Wenn ich den Code-Coverage-Bericht überprüfen, sehe ich folgendes:

    array_walk(                       
        $variable1,                       
        function($val,$key) use(&$variableData, &$variable2)            
        {                         
         $variableData[$variable2][$key] = 1;                
        }                         
    ); 
    

$ variable1,
Funktion ($ val, $ key) verwenden (& $ variableData, & $ variable2)

Diese beiden Zeilen sind nicht abgedeckt! Ich verstehe nicht, warum mein phpunit diese Zeilen nicht abdecken will. Es muss eine Einstellung geben, von der ich nicht weiß, dass sie das verursacht, da ich die gleiche Version von PHPUnit wie andere Entwickler habe und sie auf ihrem Rechner, aber nicht auf meinem Computer läuft. Ich sehe auch das gleiche Problem in einer Aussage wie folgt aus:

if ($var === 1) { 
     echo 'yes'; 
    } else { 
     echo 'nope'; 
    } 

Nun werden beide Bedingungen der Unit-Test decken jedoch nicht die folgende Zeile nicht abdeckt:

} else {

Macht das überhaupt Sinn? Der seltsamste Teil ist, dass es die meiste Zeit funktioniert, aber es gibt ein paar Orte, die dieses Verhalten haben, obwohl es kein Muster gibt, um anzuzeigen, was es verursacht. Ich habe andere Entwickler dieses Problem auf meiner Maschine betrachten lassen und sie sind verwirrt und können nicht erklären, was sie verursacht. Das Problem ist, da es für mich lokal versagt, obwohl ich Bobs Datei nicht berührt habe, hindert es mich daran, meine Änderungen einzuchecken. Ist schon mal jemand auf dieses Problem gestoßen? Ich werde versuchen, PHP-Einheit zu deinstallieren und neu zu installieren, aber ansonsten bin ich ratlos. Jede Hilfe würde sehr geschätzt werden! Hier sind meine Angaben:

PHPUnit: Version 3.6.5 Betriebssystem: OS X 10.6.8 PHP: PHP 5.3.8-ZS5.5.0 (cli) (gebaut: 24. August 2011 11.03.29) Zend Debugger: Ausgeschaltet XDebug: Gedreht auf Zend Optimizer +: off

Grüße,

Will

+0

Ich dachte, PHPUnit (mit XDebug) sagte Ihnen, welche Zeilen * ausgeführt wurden *. Ich denke, deine Array-Walk-Zeilen werden niemals ausgeführt, die der Interpreter sieht, ebenso} else {. Ihre Mitarbeiter sehen genau dieselben Linien wie abgedeckt? –

+0

... Lesen Sie Ihre Notiz genauer. Bob bekommt eine gute Abdeckung, Sie holen, ändern Ihren Code, und jetzt ist die Abdeckung nicht richtig? Was passiert, wenn Sie sauber abrufen und die Tests ausführen? Warum glaubst du, dass es nicht das ist, was du verändert hast? –

+0

Sie laufen alle die gleichen php/xdebug-Versionen? – edorian

Antwort

1

Executable und ausgeführt Zeilen werden von xdebug an PHPUnit gemeldet. Verschiedene Versionen von xdebug können in den als abgedeckt berichteten Zeilen variieren.

Wenn Sie das Gefühl haben, dass sie falsch sind, stellen Sie einen einfachen Testfall bereit und öffnen Sie einen Fehler unter xdebug's issue tracker.

Verwandte Themen