Diagnostics add context that helps explain why a test failed.

diagnostics A diagnostic line should be specific enough to help without changing the result of the test itself.

Diagnostic Messages

age
diagnostic_messages.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my $age = -1;
my $valid = $age >= 0;
my $status = $valid ? "ok" : "not ok";
my $diag = $valid ? "none" : "age must be nonnegative";

print "age=$age\n";
print "status=$status\n";
print "diag=$diag\n";
use strict;
use warnings;

my $age = 0;
my $valid = $age >= 0;
my $status = $valid ? "ok" : "not ok";
my $diag = $valid ? "none" : "age must be nonnegative";

print "age=$age\n";
print "status=$status\n";
print "diag=$diag\n";
use strict;
use warnings;

my $age = 21;
my $valid = $age >= 0;
my $status = $valid ? "ok" : "not ok";
my $diag = $valid ? "none" : "age must be nonnegative";

print "age=$age\n";
print "status=$status\n";
print "diag=$diag\n";
  1. $age ← -1, $valid ← (empty), $status ← not ok, $diag ← age must be nonnegative

    4my $age→ -1 = -1; #@age=21, 05my $valid→ (empty) = $age-1 >= 0;6my $status→ not ok = $valid(empty) ? "ok" : "not ok";7my $diag→ age must be nonnegative = $valid(empty) ? "none" : "age must be nonnegative";89print "age=$age-1\n";10print "status=$statusnot ok\n";11print "diag=$diagage must be nonnegative\n";
    outputage=-1
    status=not ok
    diag=age must be nonnegative
  1. $age ← 0, $valid ← 1, $status ← ok, $diag ← none

    4my $age→ 0 = 0;5my $valid→ 1 = $age0 >= 0;6my $status→ ok = $valid1 ? "ok" : "not ok";7my $diag→ none = $valid1 ? "none" : "age must be nonnegative";89print "age=$age0\n";10print "status=$statusok\n";11print "diag=$diagnone\n";
    outputage=0
    status=ok
    diag=none
  1. $age ← 21, $valid ← 1, $status ← ok, $diag ← none

    4my $age→ 21 = 21;5my $valid→ 1 = $age21 >= 0;6my $status→ ok = $valid1 ? "ok" : "not ok";7my $diag→ none = $valid1 ? "none" : "age must be nonnegative";89print "age=$age21\n";10print "status=$statusok\n";11print "diag=$diagnone\n";
    outputage=21
    status=ok
    diag=none