Testing Basics
Table Cases
A small table of cases can check the same behavior for several inputs.
table test
A table test repeats the same check for each row of input and expected output.
Table Cases
table_cases.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;
sub multiply {
my ($value, $factor) = @_;
return $value * $factor;
}
my $factor = 2;
my @inputs = (1, 2, 3);
my @expected = (2, 4, 6);
my $passed = 0;
my $failed = 0;
foreach my $index (0 .. 2) {
my $actual = multiply($inputs[$index], $factor);
if ($actual == $expected[$index]) {
$passed = $passed + 1;
} else {
$failed = $failed + 1;
}
}
print "factor=$factor\n";
print "passed=$passed\n";
print "failed=$failed\n";
use strict;
use warnings;
sub multiply {
my ($value, $factor) = @_;
return $value * $factor;
}
my $factor = 1;
my @inputs = (1, 2, 3);
my @expected = (2, 4, 6);
my $passed = 0;
my $failed = 0;
foreach my $index (0 .. 2) {
my $actual = multiply($inputs[$index], $factor);
if ($actual == $expected[$index]) {
$passed = $passed + 1;
} else {
$failed = $failed + 1;
}
}
print "factor=$factor\n";
print "passed=$passed\n";
print "failed=$failed\n";
use strict;
use warnings;
sub multiply {
my ($value, $factor) = @_;
return $value * $factor;
}
my $factor = 3;
my @inputs = (1, 2, 3);
my @expected = (2, 4, 6);
my $passed = 0;
my $failed = 0;
foreach my $index (0 .. 2) {
my $actual = multiply($inputs[$index], $factor);
if ($actual == $expected[$index]) {
$passed = $passed + 1;
} else {
$failed = $failed + 1;
}
}
print "factor=$factor\n";
print "passed=$passed\n";
print "failed=$failed\n";
$factor ← 2, @inputs ← 3, @expected ← 3, $passed ← 0, $failed ← 0
9my $factor→ 2 = 2; #@factor=1, 310my @inputs→ 3 = (1, 2, 3);11my @expected→ 3 = (2, 4, 6);12my $passed→ 0 = 0;13my $failed→ 0 = 0;foreach my $index (0 .. 2)
pass 1 of 315foreach my $index0 (0 .. 2) {16 my $actual = multiply($inputs[$index]1, $factor2);17 if ($actual == $expected[$index]) {All 3 passes — pass 1 is the card above pass $index$inputs[$index]1 0 1 2 1 2 3 2 3 $value ← 1, $factor ← 2
pass 1 of 34sub multiply {5 my ($value→ 1, $factor→ 2) = @_;6 return $value1 * $factor2;7}All 3 passes — pass 1 is the card above pass $value$factor1 1 2 2 2 2 3 3 2 $actual ← 2
15foreach my $index (0 .. 2) {16 my $actual→ 2 = multiply($inputs[$index]1, $factor2);17 if ($actual == $expected[$index]) {$passed ← 1
pass 1 of 316my $actual = multiply($inputs[$index], $factor);17if ($actual2 == $expected[$index]2) {18 $passed→ 1 = $passed + 1;19} else {All 3 passes — pass 1 is the card above pass $actual$expected[$index]$passed1 2 2 0 → 1 2 4 4 1 → 2 3 6 6 2 → 3 $actual ← 4
15foreach my $index (0 .. 2) {16 my $actual→ 4 = multiply($inputs[$index]2, $factor2);17 if ($actual == $expected[$index]) {$actual ← 6
15foreach my $index (0 .. 2) {16 my $actual→ 6 = multiply($inputs[$index]3, $factor2);17 if ($actual == $expected[$index]) {print "factor=$factor ";
24print "factor=$factor2\n";25print "passed=$passed3\n";26print "failed=$failed0\n";outputfactor=2 passed=3 failed=0
$factor ← 1, @inputs ← 3, @expected ← 3, $passed ← 0, $failed ← 0
9my $factor→ 1 = 1;10my @inputs→ 3 = (1, 2, 3);11my @expected→ 3 = (2, 4, 6);12my $passed→ 0 = 0;13my $failed→ 0 = 0;foreach my $index (0 .. 2)
pass 1 of 315foreach my $index0 (0 .. 2) {16 my $actual = multiply($inputs[$index]1, $factor1);17 if ($actual == $expected[$index]) {All 3 passes — pass 1 is the card above pass $index$inputs[$index]1 0 1 2 1 2 3 2 3 $value ← 1, $factor ← 1
pass 1 of 34sub multiply {5 my ($value→ 1, $factor→ 1) = @_;6 return $value1 * $factor1;7}All 3 passes — pass 1 is the card above pass $value$factor1 1 1 2 2 1 3 3 1 $actual ← 1
15foreach my $index (0 .. 2) {16 my $actual→ 1 = multiply($inputs[$index]1, $factor1);17 if ($actual == $expected[$index]) {$failed ← 1
pass 1 of 318 $passed = $passed + 1;19} else {20 $failed→ 1 = $failed + 1;21}All 3 passes — pass 1 is the card above pass $failed1 0 → 1 2 1 → 2 3 2 → 3 $actual ← 2
15foreach my $index (0 .. 2) {16 my $actual→ 2 = multiply($inputs[$index]2, $factor1);17 if ($actual == $expected[$index]) {$actual ← 3
15foreach my $index (0 .. 2) {16 my $actual→ 3 = multiply($inputs[$index]3, $factor1);17 if ($actual == $expected[$index]) {print "factor=$factor ";
24print "factor=$factor1\n";25print "passed=$passed0\n";26print "failed=$failed3\n";outputfactor=1 passed=0 failed=3
$factor ← 3, @inputs ← 3, @expected ← 3, $passed ← 0, $failed ← 0
9my $factor→ 3 = 3;10my @inputs→ 3 = (1, 2, 3);11my @expected→ 3 = (2, 4, 6);12my $passed→ 0 = 0;13my $failed→ 0 = 0;foreach my $index (0 .. 2)
pass 1 of 315foreach my $index0 (0 .. 2) {16 my $actual = multiply($inputs[$index]1, $factor3);17 if ($actual == $expected[$index]) {All 3 passes — pass 1 is the card above pass $index$inputs[$index]1 0 1 2 1 2 3 2 3 $value ← 1, $factor ← 3
pass 1 of 34sub multiply {5 my ($value→ 1, $factor→ 3) = @_;6 return $value1 * $factor3;7}All 3 passes — pass 1 is the card above pass $value$factor1 1 3 2 2 3 3 3 3 $actual ← 3
15foreach my $index (0 .. 2) {16 my $actual→ 3 = multiply($inputs[$index]1, $factor3);17 if ($actual == $expected[$index]) {$failed ← 1
pass 1 of 318 $passed = $passed + 1;19} else {20 $failed→ 1 = $failed + 1;21}All 3 passes — pass 1 is the card above pass $failed1 0 → 1 2 1 → 2 3 2 → 3 $actual ← 6
15foreach my $index (0 .. 2) {16 my $actual→ 6 = multiply($inputs[$index]2, $factor3);17 if ($actual == $expected[$index]) {$actual ← 9
15foreach my $index (0 .. 2) {16 my $actual→ 9 = multiply($inputs[$index]3, $factor3);17 if ($actual == $expected[$index]) {print "factor=$factor ";
24print "factor=$factor3\n";25print "passed=$passed0\n";26print "failed=$failed3\n";outputfactor=3 passed=0 failed=3