2016-12-20 3 views
0

私はlaravelの単体テストに非常に特異な問題があります。私がしようとしているのは基本的な単体テストです。私はテストで一つのクラスを設定しています。テストを実行する単一のメソッドがあるとき、テストは完全に機能しました。クラスは次のようになりました。2つ以上のメソッドを使用すると、LaravelのPHPUnitテストが失敗する

class Pixel_BasicTest extends Illuminate\Foundation\Testing\TestCase { 


public function createApplication() 
{ 
    $app = require __DIR__.'/../bootstrap/app.php'; 
    $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap(); 
    return $app; 
} 

public function testRoutes(){ 
    echo "Start of testRoutes\n"; 

    //Test all the GET routes we have 
    $routeCollection = Route::getRoutes(); 
    $num_404s = 0; 
    $path_404s = []; 
    ...various other code that does some tests, these all work right 
} 
} 

ここで、別の関数を追加しようとすると問題が発生します。私のクラスには、次のようになります。

class Pixel_BasicTest extends Illuminate\Foundation\Testing\TestCase { 


public function createApplication() 
{ 
    $app = require __DIR__.'/../bootstrap/app.php'; 
    $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap(); 
    return $app; 
} 

public function testRoutes(){ 
    echo "Start of testRoutes\n"; 

    //Test all the GET routes we have 
    $routeCollection = Route::getRoutes(); 
    $num_404s = 0; 
    $path_404s = []; 
    ...various other code that does some tests, these all work right 
} 

public function testSecondThing() { 
    echo "Start of testSecondThing"; 
    ...some code testing something else 
} 


} 

を今、私は完全に第二の機能を最初の関数でそのコードを入れて、削除した場合、テストが完全に実行するので、私は、第二の機能からのコードが動作することを知っています。私は2番目の関数のコードを入れたときにしかし、それは失敗し、私のターミナルウィンドウは、次のようになります

Mikes-MacBook-Air-96:hq pixelmember$ ./vendor/bin/phpunit -v --debug 
PHPUnit 4.8.29 by Sebastian Bergmann and contributors. 

Runtime: PHP 5.6.10 
Configuration: /Users/pixelmember/Documents/hq/phpunit.xml 


Starting test 'Pixel_BasicTest::testRoutes'. 
.Start of testRoutes 
End of testRoutes 

Starting test 'Pixel_BasicTest::testAfterschool'. 
Mikes-MacBook-Air-96:hq pixelmember$ 

あなたが見ることができるように、それは第二の機能を取得し、ちょうど停止したか失敗したか何か。エラーメッセージは表示されず、関数の開始時にコードに書き込んだメッセージも表示されません(echo "Starting testSecondThing()"部分)

私は正直なところ、する。単体テストを使わずに、アプリケーションの他の部分で作業することもできますが、単体テストを1つの機能ですべて実行する必要はありません。

私の役に立つphpunit.xmlファイルです。おそらく誰かがここで何かを見ることができます:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit backupGlobals="false" 
    backupStaticAttributes="false" 
    bootstrap="bootstrap/autoload.php" 
    colors="true" 
    convertErrorsToExceptions="true" 
    convertNoticesToExceptions="true" 
    convertWarningsToExceptions="true" 
    processIsolation="false" 
    stopOnFailure="false" 
    syntaxCheck="false"> 
<testsuites> 
    <testsuite name="Application Test Suite"> 
     <file>./tests/Pixel_BasicTest.php</file> 
    </testsuite> 
</testsuites> 
<filter> 
    <blacklist> 
     <directory>./vendor</directory> 
    </blacklist> 
</filter> 
<php> 
    <env name="APP_ENV" value="testing"/> 
    <env name="CACHE_DRIVER" value="array"/> 
    <env name="SESSION_DRIVER" value="array"/> 
    <env name="DB_DATABASE" value="test"/> 
    <env name="DB_USERNAME" value="root"/> 
    <env name="DB_PASSWORD" value=""/> 
</php> 

を私は実際にいくつかのデータベース関連の環境変数を追加する以外に、このファイルの大部分を編集したり、変更していません。

編集:私は実際にそれを考え出した私は私の問題を修正し、FIX

答えて

0

うわーについては下記を参照してください。時にはそれはちょうど休憩を取る必要があります。

誰かが似たような問題について助けを必要とする場合は、私の問題を解決するために私のphpunit.xmlファイルを変更しました。

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit backupGlobals="false" 
     backupStaticAttributes="false" 
     bootstrap="bootstrap/autoload.php" 
     colors="true" 
     convertErrorsToExceptions="true" 
     convertNoticesToExceptions="true" 
     convertWarningsToExceptions="true" 
     processIsolation="true" 
     stopOnFailure="false" 
     syntaxCheck="false"> 
    <testsuites> 
     <testsuite name="Application Test Suite"> 
      <file>./tests/Pixel_BasicTest.php</file> 
     </testsuite> 
    </testsuites> 
    <filter> 
     <blacklist> 
      <directory>./vendor</directory> 
     </blacklist> 
    </filter> 
    <php> 
     <env name="APP_ENV" value="testing"/> 
     <env name="CACHE_DRIVER" value="array"/> 
     <env name="SESSION_DRIVER" value="array"/> 
     <env name="DB_DATABASE" value="test"/> 
     <env name="DB_USERNAME" value="root"/> 
     <env name="DB_PASSWORD" value=""/> 
    </php> 
</phpunit> 

まさにこの作品、なぜ私はまだ好奇心旺盛だし、まさに、この設定はありません:私は私のphpunit.xmlファイルは、現在のように見えるので、trueに設定「processIsolation」に変更しましたか?私はこれが別々のPHPプロセスで各テストを実行することを知っていますが、なぜこれが助けて問題を解決するのかがわかりません。そして、これが本当に問題を解決したか、

PHPUnitの経験が豊富な人がこれを少しでも気にしてくれればと大変感謝します。

編集:私は使用ドキュメントへのリンク: phpunit.xml設定ファイル: https://phpunit.de/manual/current/en/appendixes.configuration.html 設定のいくつかの定義: https://phpunit.de/manual/current/en/textui.html#textui.clioptions

関連する問題