2016-05-24 12 views
4

Ich habe einige Probleme einschließlich einer Datei in einem PHP-Test. Zum Beispiel: wenn ich den folgenden Code in PHPStorm ausführe bekomme ich die erwartete Ausgabe.Wie man Datei in phpunit Test einbindet?

Code:

class NifvalidationTest extends PHPUnit_Framework_TestCase 
{ 
    public function test_apiRequest() 
    { 
     $result = 1+1; 
     $this->assertEquals(2, $result); 
    } 
} 

Ausgang:

Testing started at 16:58 ... 
PHPUnit 5.2.12 by Sebastian Bergmann and contributors. 



Time: 120 ms, Memory: 11.50Mb 

OK (1 test, 1 assertion) 

Process finished with exit code 0 

Aber wenn ich eine Methode von einer anderen Klasse zugreifen muß mit dem Include, ich nicht die erwarteten Ausgabe erhalten. Nur als Beispiel, wenn ich den folgenden Code ausführen:

class NifvalidationTest extends PHPUnit_Framework_TestCase 
{ 
    public function test_apiRequest() 
    { 
     include('/../nifvalidation.php'); 
     $result = 1+1; 
     $this->assertEquals(2, $result); 
    } 
} 

ich diese statt der erwarteten Ausgang:

Testing started at 17:05 ... 
PHPUnit 5.2.12 by Sebastian Bergmann and contributors. 


Process finished with exit code 0 

Alle Ideen, warum die enthalten wird, um den Test zu brechen?

Hinweis 1: Im obigen Beispiel muss ich die Datei nicht einschließen, aber ich brauche in einem anderen Test.

Hinweis 2: Der Pfad zur Datei 'nifvalidation.php' ist korrekt.

+0

http://stackoverflow.com/questions/15193816/phpunit-doesnt-allow-me-to-include-files –

+0

Vielen Dank für die Antwort @FelippeDuarte, aber ich bin ein paar Probleme, die das Verständnis der beste Antwort in diese Frage. –

+0

Ihr Problem scheint etwas mit Ihrer nifvalidation.php Datei zu sein. Könnten Sie den Code für uns zeigen? –

Antwort

4

Ich denke, dass Ihr Include-Pfad falsch ist. Ihre Struktur kann etwas sein wie diese
ParentDir
    -> nifvalidation.php
    -> testsFolder
        -> NifvalidationTest.php

statt

include('/../nifvalidation.php') 

verwenden
include(dirname(__FILE__)."/../nifvalidation.php"); 
+0

Ja, die Struktur ist so. Ich habe versucht, das Include wie vorgeschlagen zu verwenden, funktioniert aber leider auch nicht. –

1

Verwenden require() oder require_once() statt include()

3

verwenden, können Sie die bootstrap flag verwenden, wenn die Tests von der Kommandozeile aufrufen alle Dateien zu schließen, Konstanten definieren, und laden alle Variablen, Klassen, etc.

--bootstrap <file>  A "bootstrap" PHP file that is run before the tests. 

beispielsweise eine autoload.php schaffen, die die Konstanten definiert und umfasst y unsere Dateien, dann können Sie es von der Kommandozeile als solche aufrufen:

phpunit --bootstrap autoload.php testsFolder/NifvalidationTest 

Für einen automatisierten Ansatz, können Sie auch create a phpunit.xml file die die Bootstrap-Informationen enthält:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit bootstrap="autoload.php"> 
    <testsuites> 
     <testsuite name="Nifvalidation Test Suite"> 
      <directory>./testsFolder</directory> 
     </testsuite> 
    </testsuites> 
</phpunit> 

In diesem speziellen Fall, basierend auf Ihren Kommentaren zum Inhalt von nifvalidation.php endet das Skript, weil PS_VERSION nicht definiert ist. Wenn Sie isolierte Komponententests durchführen, für die lediglich eine Dummy-Konstante definiert ist, können Sie festlegen, dass diese in Ihrer Testumgebung vorhanden ist.Dann können Sie einfach Ihre nifvalidation.php Datei bootstrappen.

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit bootstrap="../nifvalidation.php"> 
    <testsuites> 
     <testsuite name="Nifvalidation Test Suite"> 
      <directory>./testsFolder</directory> 
     </testsuite> 
    </testsuites> 
    <php> 
     <const name="PS_VERSION" value="whatever you need here"/> 
    </php> 
</phpunit>