Feb
21
Faster PHPUnit
I made a simple optimization to the test suite at OpenSky over the weekend and we are reaping big benefits. The premise is pretty straight forward. We use the setUp() method to create a lot of mock objects through our test suite. If these are allowed to accumulate they end up wasting a lot of space and slowing down your suite.
Luckily there is also a tearDown() method you can use to cleanup, and you can do it automatically if you use this base class:
<?php
abstract class BaseTestCase 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);
}
}
}
}
Our buddy Jenkins is much happier now — builds are approximately 20% faster.