I\'m running into an interesting problem. I\'m using PHPUnit, and my tests take more memory every single time I run them. Ie...
2.25 MB
2.5 MB
3.0 MB
The memory increase has three to four reasons:
There is nothing you can do about this except turn off code coverage.
You can use
in your PHPUnit xml. See the note about this in http://phpunit.de/manual/current/en/installation.html#installing.upgrading
In its current implementation it keeps the test cases around because thats where the result data is stored. In the future this will be changed to be more efficent but for now it's how things works.
Since the TestCase
instances are keep around your member variables are kept around too.
Meaning you can save a lot of memory by using
public function tearDown() {
unset($this->whatever);
}
but doing so is very tedious.
My suggestion is to have a base test class for all your TestCases and use this:
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);
}
}
}
}
This will clean up after you in a nice, automated way.
(props for the snippet go to: http://kriswallsmith.net/post/18029585104/faster-phpunit)
PHPUnit can't do this in a backwards compatible way that wouldn't break people's projects so you have to add it for you own :)