Using the test results for other tools

Careful : this documentation refers to un-released code. It's only available in SVN.

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->addFile('test_of_module_ship.php');
$group->addFile('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 :

Now iterating throught the results becomes really easy...

<?php
require_once('simpletest/autorun.php');
require_once('simpletest/ui/recorder.php');

$group = new TestSuite();
$group->addFile('test_of_module_ship.php');
$group->addFile('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);
    }
}

?>

A Recorder for non-developers.
Exploring the Recorder results.
The JUnit FAQ has plenty of useful testing advice.
Next is grouping test cases together.
You will need the SimpleTest testing framework for these examples.