I finally got round to trying assert_deep_equals(). Unfortunately, I don't get the kind of nice diagnostic message you mentioned in your message of a week ago. Attached is a sample test program. When I run it, all I get is the following error message:
---- !!!FAILURES!!! Test Results: Run: 1, Failures: 1, Errors: 0 There was 1 failure: 1) test_blah: Test failed Test was not successful. ---- Which is not very helpful for finding where in the structure the difference was found. Am I missing some important configuration for my test harness? Thx. Alain > -----Original Message----- > From: Desilets, Alain > Sent: May 16, 2007 7:35 PM > To: 'Adrian Howard'; [email protected] > Cc: Farley, Benoit > Subject: RE: [Perlunit-users] Comparing deeply nested data structures. > > Great, thanks Adrian. That sounds exactly like what we're looking for. > > Alain > > > > -----Original Message----- > > From: Adrian Howard [mailto:[EMAIL PROTECTED] > > Sent: May 16, 2007 7:26 PM > > To: [email protected]; Desilets, Alain > > Cc: Farley, Benoit > > Subject: Re: [Perlunit-users] Comparing deeply nested data > structures. > > > > > > On 16 May 2007, at 18:17, Desilets, Alain wrote: > > [snip] > > > I want to easily compare the output of that method to > > expected output, > > > and if the two differ, get a good diagnostic message that > describes > > > exactly how the two differ. > > [snip] > > > Is there something in Perl that would allow me to do this? > > > > In Test::Unit there's assert_deep_equals() - for example: > > > > sub test_using_assert_deep_equals { > > my $self = shift; > > $self->assert_deep_equals( > > [ { hello =>1}, { world => 1 } ], > > [ { hello =>1}, { earth => 1 } ] > > ); > > } > > > > that gives you a diagnostic like > > > > 1) /Users/adrianh/Desktop/test.pl:53 - test_using_assert_deep_equals > > (Comparison::Test) > > Structures begin differing at: > > $a->[1]{earth} = Does not exist > > $b->[1]{earth} = '1' > > > > > I stumbled across cmp_deeply(), but I can't figure out how > > to use it. > > > It's part of a testing framework different from PerlUnit, > > and I can't > > > seem to be able to use it without running it inside that > > other testing > > > framework (which I don't have time to learn). > > > > It's not that hard to shim the more popular Test::Builder based > > "assertion" modules into Test::Unit. The > off-the-top-of-my-head greasy > > hack of: > > > > { package Test::Unit::MyTestCase; > > use base qw( Test::Unit::TestCase ); > > use Test::Builder '0.7'; > > use Carp qw( confess ); > > > > sub assert_using { > > my ( $self, $test_coderef ) = @_; > > my $builder = Test::Builder->new; > > $builder->reset; > > $builder->plan( 'no_plan' ); > > my $output = ''; > > open my $output_fh, '>', \$output or die; > > $builder->output( $output_fh ); > > $builder->failure_output( $output_fh ); > > $builder->todo_output( $output_fh ); > > $self->assert( $test_coderef->(), $output ); > > } > > } > > > > would allow you to do things like: > > > > { package Comparison::Test; > > use base qw( Test::Unit::MyTestCase ); > > > > use Test::More; # provides is_deeply > > > > sub test_using_is_deeply { > > my $self = shift; > > $self->assert_using( sub { > > is_deeply [ { hello =>1}, { world => 1 } ], > > [ { hello =>1}, { earth => 1 } ]; > > } ); > > } > > > > use Test::Deep; # provides cmp_deeply > > > > sub test_using_cmp_deeply { > > my $self = shift; > > $self->assert_using( sub { > > cmp_deeply( [ { hello =>1}, { world => 1 } ], > > [ { hello =>1}, { earth => 1 } ] > > ); > > } ); > > } > > } > > > > giving you diagnostics like > > > > 2) /private/var/tmp/folders.502/Cleanup At Startup/ > > test-201050484.793.pl:21 - test_using_cmp_deeply(Comparison::Test) > > not ok 1 > > # Failed test at /private/var/tmp/folders.502/Cleanup At Startup/ > > test-201050484.793.pl line 43. > > # Comparing hash keys of $data->[1] > > # Missing: 'earth' > > # Extra: 'world' > > > > 3) /private/var/tmp/folders.502/Cleanup At Startup/ > > test-201050484.793.pl:21 - test_using_is_deeply(Comparison::Test) > > not ok 1 > > # Failed test at /private/var/tmp/folders.502/Cleanup At Startup/ > > test-201050484.793.pl line 33. > > # Structures begin differing at: > > # $got->[1]{earth} = Does not exist > > # $expected->[1]{earth} = '1' > > > > However if you're going to be using a bunch of Test::Builder based > > assertions it might be easier to use Test::Group or <bias > > class="author"> Test::Class </bias> instead. > > > > Cheers, > > > > Adrian > > > > >
BlahTest.pm
Description: BlahTest.pm
------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/
_______________________________________________ Perlunit-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/perlunit-users
