メモリの増加には、3〜4つの理由があります。
1)PHPUnitはコードカバレッジデータを収集します
コードカバレッジをオフにする以外に、これについてできることは何もありません。
2)PHPUnitは、コードカバレッジのためにファイルトークンをキャッシュします
<phpunit cacheTokens="false">
PHPUnitxmlで使用できます。http://phpunit.de/manual/current/en/installation.html#installing.upgradingでこれに関するメモを参照してください
3)PHPUnitはそれ自体の後で適切にクリーンアップされません
現在の実装では、結果データが保存される場所であるため、テストケースを保持します。将来的にはこれがより効率的になるように変更されますが、今のところそれは物事がどのように機能するかです。
4)「4」につながる:自分自身の後も片付ける必要があります
インスタンスは保持されているため、TestCase
メンバー変数も保持されます。
つまり、を使用することで多くのメモリを節約できます
public function tearDown() {
unset($this->whatever);
}
しかし、そうすることは非常に退屈です。
私の提案は、すべてのTestCaseの基本テストクラスを用意し、これを使用することです。
class MyBaseTest extends \PHPUnit_Framework_TestCase {
protected function tearDown()
{
$refl = new \ReflectionObject($this);
foreach ($refl->getProperties() as $prop) {
if (!$prop->isStatic() && 0 !== strpos($prop->getDeclaringClass()->getName(), 'PHPUnit_')) {
$prop->setAccessible(true);
$prop->setValue($this, null);
}
}
}
}
これにより、自動化された方法で後片付けが行われます。
(スニペットの小道具は次の場所に移動します:http://kriswallsmith.net/post/18029585104/faster-phpunit)
PHPUnitは、他の人のプロジェクトを壊さない下位互換性のある方法でこれを行うことはできないので、自分で追加する必要があります:)