is_deeply on a hash


Another example with is_deeply checking the returned hash from a bug tracking system.


examples/test-more/t/is_deeply_bugs.t
use strict;
use warnings;

use MyBugs;
use Test::More tests => 3;

my %expected = (
    bugs     => 3,
    errors   => 6,
    failures => 8,
    warnings => 1,
);


my %a = fetch_data_from_bug_tracking_system(0);
is_deeply( \%a, \%expected, "Query 0" );

my %b = fetch_data_from_bug_tracking_system(1);
is_deeply( \%b, \%expected, "Query 1" );

my %c = fetch_data_from_bug_tracking_system(2);
is_deeply( \%c, \%expected, "Query 2" );


#   Failed test 'Query 1'
#   at t/is_deeply_bugs.t line 21.
#     Structures begin differing at:
#          $got->{errors} = '9'
#     $expected->{errors} = '6'

#   Failed test 'Query 2'
#   at t/is_deeply_bugs.t line 24.
#     Structures begin differing at:
#          $got->{bugs} = Does not exist
#     $expected->{bugs} = '3'
# Looks like you failed 2 tests of 3.
t/is_deeply_bugs.t .. 
Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/3 subtests 

Test Summary Report
-------------------
t/is_deeply_bugs.t (Wstat: 512 Tests: 3 Failed: 2)
  Failed tests:  2-3
  Non-zero exit status: 2
Files=1, Tests=3,  0 wallclock secs ( 0.01 usr  0.00 sys +  0.03 cusr  0.00 csys =  0.04 CPU)
Result: FAIL

What if we are testing a live system and so not interested in the exact values, just in the keys and the fact that the values are numbers?