
Since i use PHPUnit to test my symfony Applications and doing all automated stuff with Jenkins, i lost control over my lime test (e.g. in my plugins).
My Plugins stay in some kind of blackbox (lime isnt very useful with CI tools like Jenkins)
I love the Coverage Reports from PHPUnit (which is using PHP_CodeCoverage for that), which outputs me HTML or Clover, just as i need them.
To achieve the same with all my lime tests, i wrote a simple symfony plugin which, replaces the defaults “test:” tasks of symfony with my own modifed tasks.
Internally i extended the LimeHarness to use PHP_CodeCoverage for its reports:
Here is the Plugin https://github.com/digitalkaoz/rsPHPUnitLimePlugin
simply clone it or install it via pear or use svn.
Git: https://github.com/digitalkaoz/rsPHPUnitLimePlugin.git
Svn: https://svn.github.com/digitalkaoz/rsPHPUnitLimePlugin.git
PEAR: symfony plugins:install rsPHPUnitLimePlugin
After that you can use the tasks the same way (they have i slightly other name and some more options)
Usage
unit test coverage
- symfony test:phpunit-unit –coverage-clover=log/clover-unit.xml
- symfony test:phpunit-unit –coverage-html=log/coverage-unit
- symfony test:phpunit-unit –coverage-folder=lib/
- symfony test:phpunit-unit –xml=log/junit-unit.xml
functional test coverage
- symfony test:phpunit-functional –coverage-clover=log/clover-functional.xml frontend
- symfony test:phpunit-functional –coverage-html=log/coverage-functional frontend
- symfony test:phpunit-functional –coverage-folder=apps/ frontend
- symfony test:phpunit-functional –xml=log/junit-functional.xml frontend
plugin test coverage
- symfony test:phpunit-plugin –coverage-clover=log/clover-functional.xml sfGuardPlugin
- symfony test:phpunit-plugin –coverage-html=log/coverage-functional sfGuardPlugin
- symfony test:phpunit-plugin –coverage-folder=plugin/sfGuardPlugin sfGuardPlugin
- symfony test:phpunit-plugin –xml=log/junit-functional.xml sfGuardPlugin
all test coverage
- symfony test:phpunit-all –coverage-clover=log/clover-functional.xml
- symfony test:phpunit-all –coverage-html=log/coverage-functional sfGuardPlugin
- symfony test:phpunit-all –coverage-folder=./
- symfony test:phpunit-all –xml=log/junit-functional.xml
They work the same way as before, but they use PHP_CodeCoverage. You get nice HTML Reports and or Clover Reports.
To connect all your Plugin Tests with your default lime tests, simply modify your ProjectConfiguration:
/**
* reconfigure plugins
*/
public function setupPlugins()
{
if(sfConfig::get('env') == 'prod')
{
return;
}
$plugins = sfFinder::type('directory')->name('*Plugin*')->maxdepth(0)->in(dirname(__FILE__).'/../plugins');
$blackList = array('swFunctionalTestGenerationPlugin');
foreach($plugins as $plugin)
{
$plugin = substr($plugin, strripos($plugin, DIRECTORY_SEPARATOR)+1);
if(isset($this->pluginConfigurations[$plugin]) && !in_array($plugin,$blackList))
{
//connect the tests
$this->pluginConfigurations[$plugin]->connectTests();
}
}
}To integrate this tests into your Jenkins Jobs simply use following build-step (as allways) :
export SYMFONY=$WORKSPACE/lib/vendor/symfony/lib cd $WORKSPACE ./symfony test:phpunit-unit --xml=log/junit-results-plugin.xml --coverage-html=doc/coverage-plugin/ --coverage-clover=log/clover-report-plugin.xml --coverage-folder=plugins/
This will test all your unit tests, and writes the coverage to html and clover
in your post-build-actions simply publish your coverage data
Voila, now you can monitor your oldskool lime tests, or your plugins. It works with unit,functional and all test tasks

