2016-12-08 8 views
0

PHPUnitを実行すると、PHP 'error_log()またはMonolog経由でログに記録するクラスをテストします(カスタムファイルに)、ログされたコンテンツはコマンドラインにダンプされます。PHPUnitは、PHPのデフォルトエラーログとカスタムアプリケーションログファイルの両方からすべてのログメッセージをコマンドラインに出力します

でも最も単純な形で私が問題を再現することができます。それが問題なのかどうかは分からないが、最終的には、コマンドラインでログに記録されたすべてのアイテムのダンプをオフにしたいということだ。私はしばらくの間、頭に頭を叩いていましたが、私はそれを理解していないようです。これをどうやって消すのですか?

事実。

  • 私がログインするすべての項目は、以下の戻り空の文字列のテストを実行する前に、CLI
  • に示されています。 ini_get('error_log');
  • 私はnginx(1.10.1)+ php-fpm(PHP 7.0.7を使用しています)
  • 関連する問題はありませんが、 Stop log messages from appearing in the command line

例。

class OutputOnCliTest extends PHPUnit_Framework_TestCase 
{ 
    /** @test */ 
    public function assertAndLogSomething() 
    { 
     $this->assertEquals(true, true); 

     error_log('I do not want to show this on the command line'); 
    } 

    /** @test */ 
    public function assertAndLogSomethingElse() 
    { 
     $logger = new \Monolog\Logger('loggerName'); 

     // no need to set a Monolog handler for this example, just want to log right away 
     $logger->info('I do not want to show this either'); 

     $this->assertEquals(true, true); 
    } 
} 

CLI:

$ ls -la 

-rw-r--r-- 1 user group 1150 Dec 7 18:47 phpunit.xml 
drwxr-xr-x 4 user group 136 Dec 7 17:44 tests 
drwxr-xr-x 17 user group 578 Dec 7 10:05 vendor 


$ ./vendor/bin/phpunit 
PHPUnit 5.7.2 by Sebastian Bergmann and contributors. 

I do not want to show this on the command line 
.[2016-12-07 16:53:58] loggerName.INFO: I do not want to show this either 
.                 2/2 (100%) 

Time: 24 ms, Memory: 4.00MB 

OK (2 tests, 2 assertions) 
$ 

PHPUnit.xml

<phpunit bootstrap="vendor/autoload.php"> 
    <testsuites> 
     <testsuite name="Unit-Tests"> 
      <directory>./tests</directory> 
     </testsuite> 
    </testsuites> 
</phpunit> 

は、誰かが私は私の頭を叩いて停止することができます私を助けてください。 :-)

答えて

0

多分設計ソリューションのより多くが、「それは実際にロガーテスト自体以外のものを、ログに記録しないように(ただし、モノローグを使用している場合、私はあなたがドン行うように私は、Loggerオブジェクトをモックと思いますとにかくこれをテストする必要はありません)。あなたが実際に(どこか別の場所または)ブラウザへの出力が受信されたかどうかをテストしたくない場合は

、あなたはこれを試みることができる:

/** 
* @preserveGlobalState disabled 
* @runInSeparateProcess 
*/ 
public function testOutputCanSend() 
{ 
    ob_start(); 
    // Do some stuff here that outputs directly, $logger->addInfo() etc 
    ob_end_clean(); 
} 
関連する問題