How does ESP-UTF (see part 1) run the single test?
function doTest($testClassName, $testMethodName)
{
global $testFailed;
global $testFailedCause;
$testFailedCause = "";
$testFailed = false;
$object = new $testClassName();
$object->$testMethodName();
$result = new TestResult($testClassName, $testMethodName, !$testFailed, $testFailedCause);
return $result;
}
Things to note here:
- the test result is held by a pair of global variables (lines 3 and 4); that's how I handled the errors; more on that later
- strings can be used as class and methods names without further ado (lines 8 and 9)
- the result is returned as a TestResult object
I did not know how to trap errors (did I already say that I'm stuck with PHP4 and no exception handling?) other than by setting an error handler:
set_error_handler ('errorHandler');
function errorHandler($errno, $errstr, $errfile, $errline)
{
global $testFailed;
global $testFailedCause;
$testFailedCause = "\nError: " . $errno . ", file: " . $errfile . "; line: " . $errline . "; error: ". $errstr . "";
$testFailed = true;
return true;
}
There's catch of course: if an assertion fails the execution of the method does not get stopped, it just goes on through to the end because that's how the error handler's supposed to work. Since I consider that a minor annoyance I did not waste further effort trying to mend that.
Here's the TestResult class:
class TestResult
{
var $testClassName;
var $testMethodName;
var $testBooleanResult;
var $testMessageResult;
function TestResult($className, $methodName, $booleanResult, $messageResult)
{
$this->testClassName = $className;
$this->testMethodName = $methodName;
$this->testBooleanResult = $booleanResult;
$this->testMessageResult = $messageResult;
}
function x()
{
return $this->testClassName . "." . $this->testClassMethod . "='" . $this->testMessageResult . "'";
}
}
Nothing fancy, in fact.
In the next episode the Test class
Nessun commento:
Posta un commento