PHPUnit を実行すると、単一のテスト クラス内で多くのテストを実行すると、メモリ リークが発生したように見えます。しかし、これがバグなのか、それとも予期された動作なのかはわかりません。
再現するには:
- 私はばかげた assertTrue(true) で単純な testHello() を作成します。
- 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 出力 =
- プロバイダーにダーティな echo() を追加しました。これは、配列によってスクリプトが消費するメモリの量を知るためだけです。
- 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;
}
}
?>