2012-05-06 20 views
0

當我運行PHPUnit時,它似乎在單個測試類中運行多個測試時有內存泄漏。但我不知道這是一個錯誤還是它是預期的行爲。PHPUnit_Framework_TestCase內存泄漏與大DataProvider

重現:

  • 我創建了一個簡單的testHello()有一個愚蠢的assertTrue(TRUE)。
  • 我從providerHello()提供它。只喂3個虛擬參數。
  • 隨着$numberOfTests = 1;,消耗的內存是5.75MB。
    • PHPUnit的輸出= Time: 0 seconds, Memory: 5.75Mb
  • 隨着$numberOfTests = 10000;,我不指望內存增長這麼多,只是在新數組的大小。但使用的內存是99.75MB,我覺得它太多了。
    • PHPUnit的輸出= Time: 4 seconds, Memory: 99.75Mb
  • 我加在提供者髒回波(),只需知道數組多少存儲器取得的腳本來消耗。
    • 隨着1個測試:Memory = 5294552(5.2MB)
    • 隨着10.000測試:Memory = 15735352(15.7MB)

的問題:

  • 爲什麼我在寬鬆84MB辦法? (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

需要設置backupGlobals和backupStaticAttributes假在phpunit.xml文件。如果你不使用配置文件,你也可以在命令行上執行。

--no-globals-backup 
--static-backup