0
當我運行PHPUnit時,它似乎在單個測試類中運行多個測試時有內存泄漏。但我不知道這是一個錯誤還是它是預期的行爲。PHPUnit_Framework_TestCase內存泄漏與大DataProvider
重現:
- 我創建了一個簡單的testHello()有一個愚蠢的assertTrue(TRUE)。
- 我從providerHello()提供它。只喂3個虛擬參數。
- 隨着
$numberOfTests = 1;
,消耗的內存是5.75MB。- PHPUnit的輸出=
Time: 0 seconds, Memory: 5.75Mb
- PHPUnit的輸出=
- 隨着
$numberOfTests = 10000;
,我不指望內存增長這麼多,只是在新數組的大小。但使用的內存是99.75MB,我覺得它太多了。- PHPUnit的輸出=
Time: 4 seconds, Memory: 99.75Mb
- PHPUnit的輸出=
- 我加在提供者髒回波(),只需知道數組多少存儲器取得的腳本來消耗。
- 隨着1個測試:
Memory = 5294552
(5.2MB) - 隨着10.000測試:
Memory = 15735352
(15.7MB)
- 隨着1個測試:
的問題:
- 爲什麼我在寬鬆84MB辦法? (99.75真的消耗 - 真正使用的15.75陣列)
- 它是否正常,它在每次迭代時分配內存,可能是它的內部setUp(),但在內部tearDown()時沒有釋放相同的數量?
- 我做錯了什麼?
我的版本:
phpunit --version
給PHPUnit 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;
}
}
?>