Testing without frameworks
| Hand asserts | |
| Table cases | |
| Run script | |
| Red-green habit |
Hand asserts
A test can be one tiny helper: compare expected with actual, print OK or FAIL, stop on the first lie. No framework is needed to learn the core loop of arrange, act, and check.
function check(bool $cond, string $label): void { if (!$cond) { echo "FAIL: " . $label . "\n"; exit(1); } echo "OK: " . $label . "\n"; } check(2 + 2 === 4, "math works");
Table cases
One example proves little, so pack inputs and wanted outputs into a table and loop over it. Each row becomes a named case, and adding an edge case means adding one line.
$cases = [ ["in" => 2, "want" => 4], ["in" => 5, "want" => 10], ["in" => 0, "want" => 0], ]; foreach ($cases as $c) { check($c["in"] * 2 === $c["want"], "doubles"); }
Run script
Keep every check in one plain script and run it with the PHP binary before each commit. A green run takes a blink, and a red run points at the exact line that broke the promise.
php tests/check.php
OK: math works OK: doubles
Red-green habit
Write the failing check first and watch it turn red, then write the smallest code that turns it green. The red step proves the test can catch the bug, and the green step proves the fix is real.
check(strlen("hello") === 5, "length of hello"); check(trim(" hi ") === "hi", "trim spaces");
Next: Performance
Article author: Arthur Isaev