Using the test results for other tools
What the developer wants from his tests is immediate feedback. The TextReporter and the HtmlReporter are there to show this feedback. As quickly as possible and as close to your working tools as possible : the console, the browser.
A Recorder for non-developpers
But often developers don't work alone : you may have a team contributing to the same code base next door, a manager a little bit further away and even a team of testers or power users on the other side of the planet.
For them as well tests' results are valuable pieces of information ! They just need to be formatted and archived somewhere. The Recorder allows you to grab all output to a simple PHP array.
<?php require_once('simpletest/autorun.php'); require_once('simpletest/ui/recorder.php'); $group = new TestSuite(); $group->addTestFile('test_of_module_ship.php'); $group->addTestFile('test_of_module_pay.php'); $recorder = new Recorder(); $group->run($recorder); ?>
Within this $recorder object lies the test suite information. Let's dump the $recorder->results variable and check what's in it :
<?php array(4) { [0]=> array(4) { ["time"]=> int(1173951256) ["status"]=> string(6) "Passed" ["test"]=> string(129) "examples/test_of_module_ship.php->TestUsingParcelForce->testParcelForceIsFine" ["message"]=> string(97) " at [examples/test_of_module_ship.php line 7]" } [1]=> array(4) { ["time"]=> int(1173951256) ["status"]=> string(6) "Passed" ["test"]=> string(154) "examples/test_of_module_ship.php->TestUsingMyOwnAirplane->testUsingMyOwnAirplaneOnlyWorksForSmallGifts" ["message"]=> string(134) "Expected false, got [Boolean: false] at [examples/test_of_module_ship.php line 13]" } [2]=> array(4) { ["time"]=> int(1173951256) ["status"]=> string(6) "Passed" ["test"]=> string(135) "examples/test_of_module_pay.php->TestPayForParcelForce->testPayForParcelForceIsFine" ["message"]=> string(96) " at [examples/test_of_module_pay.php line 7]" } [3]=> array(4) { ["time"]=> int(1173951256) ["status"]=> string(6) "Passed" ["test"]=> string(155) "examples/test_of_module_pay.php->TestPayForMyOwnAirplane->testPayForMyOwnAirplaneOnlyWorksForSmallGifts" ["message"]=> string(133) "Expected false, got [Boolean: false] at [examples/test_of_module_pay.php line 13]" } } ?>
Exploring the Recorder results
Each element of the $recoder->results array contains one assertion's information :
- time : when the assertion was executed, in a timestamp format.
- status : either Passed or Failed
- test : the name of the test
- message : the actual message, useful for understanding what went wrong
Now iterating throught the results becomes really easy...
<?php require_once('simpletest/autorun.php'); require_once('simpletest/ui/recorder.php'); $group = new TestSuite(); $group->addTestFile('test_of_module_ship.php'); $group->addTestFile('test_of_module_pay.php'); $recorder = new Recorder(); $group->run($recorder); foreach (recorder->results as $result) { if ($result->status == "Failed") { do_something_while_it_is_time(result); } } ?>