2012-05-06 32 views
0

PHPUnitを実行すると、1つのテストクラス内で多くのテストを実行するとメモリリークが発生したように見えます。しかし、これがバグかそれが期待された行動かどうかはわかりません。大規模なデータプロバイダでPHPUnit_Framework_TestCaseメモリリーク

  • を私は愚かいるassertTrue(真)で、単純なtestHello()を作成します。再現する

  • 私はそれをproviderHello()からフィードします。ちょうど3つのダミーパラメータを与える。
  • $numberOfTests = 1;の場合、消費メモリは5.75MBです。 $numberOfTests = 10000;
    • PHPUnitの出力= Time: 0 seconds, Memory: 5.75Mb
  • 、私はメモリが新しい配列のサイズだけ、そんなに成長することを期待しないでください。しかし、使用されているメモリは99.75MBだと思います。
    • PHPUnitの出力= Time: 4 seconds, Memory: 99.75Mb
  • 私はちょうど、アレイが消費するためのスクリプトを作ったどのくらいのメモリを知っている、プロバイダのダーティエコー()を追加。 Memory = 15735352(15.7メガバイト)

質問:

  • 私は84メガバイトを失うのはなぜ10.000テストでMemory = 5294552(5.2メガバイト)
  • :1回のテストで
    • 方法? (99.75が実際に消費された - 配列で本当に使用されている15.75)
    • おそらくその内部のsetUp()は各繰り返しでメモリを割り当てますが、内部tearDown()では同じ量を解放しませんか?
    • 何か間違っていますか?

    マイバージョン:

    phpunit --versionPHPUnit 3.6.10 by Sebastian Bergmann.を与えます。

    これはコードです:

    <?php 
    class DemoTest extends \PHPUnit_Framework_TestCase 
    { 
        /** @dataProvider providerHello */ 
        public function testHello($a, $b, $c) 
        { 
         $this->assertTrue(true); 
        } 
    
        public function providerHello() 
        { 
         $numberOfTests = 10000; 
    
         $data = array(); 
    
         for($i = 0; $i < $numberOfTests; $i++) 
         { 
          $data[] = array(1, 2, 3); 
         } 
    
         echo("Memory = " . memory_get_peak_usage() . PHP_EOL); 
    
         return $data; 
        } 
    
    } 
    ?> 
    

答えて

0

あなたphpunit.xmlファイルでfalseにbackupGlobalsとbackupStaticAttributesを設定する必要があります。設定ファイルを使用しない場合は、コマンドラインでも行うことができます。

--no-globals-backup 
--static-backup 
関連する問題