2010-11-03 5 views
20

Ich versuche, PHPUnit an meiner Entwicklungsumgebung arbeiten zu lassen, aber ich habe ein bisschen einen Roadblock bekommen, wenn es darum geht, PHPUnit in meine Skripte zu integrieren. Ich weiß, dass ich den Include-Pfad auf PHP setzen muss, aber jede Kombination, die ich versucht habe, scheitert, ohne dass der Compiler die PHPUnit_Framework_TestCase-Klasse sieht.Getting PHPUnit Working - Include Pfad nicht richtig eingestellt?

Ich habe gerade Updates für PHP und PEAR ausgeführt und PHPUnit ist auf dem Computer installiert, weil ich über die Befehlszeile darauf zugreifen kann.

PHPUnit bei /usr/share/php/PHPUnit

Birne ist bei /usr/share/php/PEAR

installiert ist Gibt es etwas, was ich vermisst habe? Dies ist das erste Mal, dass ich versuche, PHPUnit oder sogar etwas von PEAR zu verwenden. Ich bin auf Ubuntu 10.10. Jede Hilfe wäre willkommen.

Bearbeiten - Es gibt nichts im Include-Pfad in meinem PHP-Ini. Momentan befindet sich der Code ist nur

<?php 
class Stacktest extends PHPUnit_Framework_TestCase 
{ 

} 

Ich habe keine Ahnung, was zu schließen oder was in der Include-Pfad zu setzen, weil es scheint, dass für alle Infos im Web über PHPUnit, diese wenig Informationen kritisch fehlt .

+0

Können Sie weitere Informationen dazu bereitstellen, wie Sie PHPUnit in Ihren Skripten verwenden möchten? –

+1

Wie genau möchten Sie Ihre Testfälle ausführen? Verwenden Sie etwas wie 'phpunit MyClassTest' in CLI? – netcoder

+1

Solltest du sagen, dass du TestCase.php nicht hinzufügen kannst? Finden Sie heraus, was Ihr Include-Pfad ist, indem Sie echo tun. Get_include_path() – Cobby

Antwort

16

Wenn Sie phpunit korrekt installiert haben (über PEAR), dann brauchen Sie keine Include-Datei; Sie müssen nur ändern, wie Sie es verwenden, um PHP-Dateien zu testen (z. B. verwenden Sie es, um zu testen, ob die Datei funktionierte, indem Sie zum Browser localhost gehen). Mit phpunit können Sie die Befehlszeile verwenden; chapter 5 gibt das gleiche Beispiel unter Verwendung der Befehlszeile (ich würde annehmen, dass es ein Standard ist). Also, wenn Sie es bekommen korrekt installiert können Sie dies tun:

  1. Datei ExampleTest.php, an der Wurzel des lokalen Host befindet (für mich ist das/var/www):

    class ExampleTest extends PHPUnit_Framework_TestCase 
    { 
        public function testOne() 
        { 
         $this->assertTrue(FALSE); 
        } 
    } 
    
  2. öffnen eine Konsole (Terminal auf Mac oder Linux, Eingabeaufforderung auf Win), navigieren Sie zu Ihrem Localhost-Dokumentstamm (wo Sie ExampleTest gespeichert haben).php) und geben Sie den folgenden:

    phpunit --verbose ExampleTest.php 
    
  3. sollten Sie sehen:

    PHPUnit 3.4.13 by Sebastian Bergmann. 
    
    F 
    
    Time: 1 second, Memory: 6.50Mb 
    
    There was 1 failure: 
    
    1) ExampleTest::testOne 
    Failed asserting that <boolean:false> is true. 
    
    /var/www/ExampleTest.php:6 
    
    FAILURES! 
    Tests: 1, Assertions: 1, Failures: 1. 
    

Anmerkungen: Alle oben vorausgesetzt, dass Sie installiert phpunit richtig (wie in chapter 3 angegeben) und Sie neu gestartet Apache nach Das .

, wenn Sie den folgenden Code

# error reporting 
ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

# include TestRunner 
require_once 'PHPUnit/TextUI/TestRunner.php'; 

# our test class 
class ExampleTest extends PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     $this->assertTrue(FALSE); 
    } 
} 

# run the test 
$suite = new PHPUnit_Framework_TestSuite('ExampleTest'); 
PHPUnit_TextUI_TestRunner::run($suite); 

bearbeiten

Ubuntu 10.10 in Ihrer Frage verwenden möchten, um Tests in Ihrem Browser wirklich gesichtet einfach. Für Ubuntu installiert Ich empfehle dies: im Terminal tun:

sudo pear uninstall phpunit/PHPUnit 
sudo apt-get install phpunit 
sudo /etc/init.d/apache2 restart 

Hinweis: die erste Zeile nicht aus, wenn Sie nicht phpunit durch Birne installiert haben. Die letzte Zeile scheint nötig zu sein (zumindest in meinem Fall).

sudo /etc/init.d/apache2 reload # Or 
sudo service apache2 restart 
+1

Beim Versuch, im Browser zu starten, wird TestRunner.php korrekt geladen, aber die Datei der Elternklasse PHPUnit_Runner_BaseTestRunner kann nicht geladen werden. Ich bekomme den folgenden Fehler, wenn ich dies im Browser ausführe: Schwerwiegender Fehler: Klasse 'PHPUnit_Runner_BaseTestRunner' nicht in /usr/share/php/PHPUnit/TextUI/TestRunner.php in Zeile 60 gefunden –

+0

erstens, wie haben Sie phpunit installiert? Wenn Birne, dann entfernen Sie es und installieren Sie es durch apt-get Sie haben keine Probleme mit Include-Dateien mehr! –

+0

Sekunde, wenn Sie diesen Fehler erhalten, können Sie diese Datei auch benötigen require_once 'PHPUnit/Runner/BaseTestRunner.php'; vor TestRunner.php ist erforderlich, aber ich habe eine starke feeling smth, wenn falsch mit Ihnen zu installieren, so ist dies möglicherweise nicht der letzte Fehler, den Sie sehen, deshalb empfehle ich mit apt-get, wie Sie sicher sein werden, es funktioniert. –

2

Stellen Sie sicher, dass Sie bei jeder Verwendung von include() oder require() den tatsächlichen Dateinamen mit dirname(__FILE__) voranstellen. Dies stellt sicher, dass die Datei, die Sie einschließen, in dem von Ihnen angegebenen Pfad relativ zu der tatsächlichen Datei ist, in der sich das Include befindet. Durch deftault enthält PHP relativ zu der Datei, die zum Starten des Programms aufgerufen wird.

6

Fügen Sie diese Zeile in php.ini:

include_path=".:/usr/share/php:/usr/share/pear:/usr/share/php/PHPunit:/usr/share/php/PEAR" 

Speichern Sie die Datei und starten Sie Apache.

Stellen Sie außerdem sicher, dass Sie die richtige php.ini bearbeiten. Versuchen Sie, locate php.ini zu verwenden, um alle Stellen zu finden, die es möglicherweise versteckt. Es ist normalerweise unter dem Verzeichnis /usr irgendwo.

+1

Es ist nicht nötig, die richtige Datei zu finden. Verwenden Sie "php -i", um die vollständige Konfiguration zu erhalten. Es enthält den aktuell geladenen Konfigurationsdateipfad. Oder benutze phpinfo() in einer PHP-Datei. –

+0

'php -i | grep php.ini' grep ist dein Freund, aber wenn du php von Apache benutzt, solltest du in einem Browser nach php_info() suchen und nach "php.ini" suchen. Ubuntu-Dateien sind unter/etc/apache2/und es gibt mehr Dateien unter "/ etc/php5/{apache2 | cli | cgi}". – erm3nda

26

Ab PHPUnit 3.5, müssen Sie den Autoloader sind selbst:

require 'PHPUnit/Autoload.php'; // PEAR should be in your include_path 
+0

Das war die richtige Lösung - der Autoloader muss explizit enthalten sein. Stellen Sie sicher, dass Sie include-Pfade auf "pear" und "phpunit" gesetzt haben. –

+6

Wo? Am Anfang jeder Testdatei? –

+0

@BSeven, ich weiß nicht genau, wie ich dir helfen soll, aber diese Antwort war hilfreich genug, um mich in meiner Situation zum Laufen zu bringen. Ich benutze PHPStorm 6, und ich konnte in die Einstellungen (Projekt)> PHP> PHPUnit gehen und die PHPUnit-Bibliothek auf 'benutzerdefinierten Loader verwenden' setzen und dann den Pfad zu meinem Projekt 'vendor/autoload.php 'setzen 'Datei. –

0

konnte ich es durch an der Spitze von meinem Skript set_include_path arbeiten erhalten (siehe Beispiel hier http://www.siteconsortium.com/h/p1.php?id=php002), und dann musste ich auch noch einbeziehen, da ich einen Selenium-Test durchführte, aber es funktionierte.

require_once ('PHPUnit/Autoload.php'); 
require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; 
Verwandte Themen