0
PHPUnitを実行すると、1つのテストクラス内で多くのテストを実行するとメモリリークが発生したように見えます。しかし、これがバグかそれが期待された行動かどうかはわかりません。大規模なデータプロバイダでPHPUnit_Framework_TestCaseメモリリーク
- を私は愚かいるassertTrue(真)で、単純なtestHello()を作成します。再現する
。
- 私はそれをproviderHello()からフィードします。ちょうど3つのダミーパラメータを与える。
$numberOfTests = 1;
の場合、消費メモリは5.75MBです。$numberOfTests = 10000;
で- PHPUnitの出力=
Time: 0 seconds, Memory: 5.75Mb
- PHPUnitの出力=
- 、私はメモリが新しい配列のサイズだけ、そんなに成長することを期待しないでください。しかし、使用されているメモリは99.75MBだと思います。
- PHPUnitの出力=
Time: 4 seconds, Memory: 99.75Mb
- PHPUnitの出力=
- 私はちょうど、アレイが消費するためのスクリプトを作ったどのくらいのメモリを知っている、プロバイダのダーティエコー()を追加。
Memory = 15735352
(15.7メガバイト)
質問:
- 私は84メガバイトを失うのはなぜ10.000テストで
Memory = 5294552
(5.2メガバイト) - :1回のテストで
- 方法? (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; } } ?>