我正在用Perl编写测试,我需要比较两个大哈希.
我使用cmp_deep( Test::Deep)和is_deeply( Test::More).
我的问题是当这些哈希中的某些东西不同时,程序会在中间退出.
我使用cmp_deep( Test::Deep)和is_deeply( Test::More).
我的问题是当这些哈希中的某些东西不同时,程序会在中间退出.
my $this = { a=>1,b=>2,d=>2,}; my $that = { a=>1,b=>3,c=>3,}; is_deeply($this,$that );
输出是:
# not ok 1 # Failed test at Tester.pl line 32. # Structures begin differing at: # $got->{b} = '2' # $expected->{b} = '3'
但我有更多不同的价值观!我需要全部看到它们.
我如何强制is_deeply打印哈希之间的所有差异而不仅仅是它们之间的第一个区别?
此外,还有一些我需要忽略它们的键.我怎样才能做到这一点?
解决方法
阅读文档对于这类事情来说通常很方便.
您的问题几乎是Test::More文档中的确切用例.
use Test::More tests => 1; my $hash1 = { a => 1,b => 2,c => 4 }; my $hash2 = { a => 1,b => 3,c => 4 }; is_deeply($hash1,$hash2,'hash are equal') or diag explain($hash1,$hash2);
示例输出:
not ok 1 - hash are equal # Failed test 'hash are equal' # at test.pl line 7. # Structures begin differing at: # $got->{b} = '2' # $expected->{b} = '3' # { # 'a' => 1,# 'b' => 2,# 'c' => 4 # } # { # 'a' => 1,# 'b' => 3,# 'c' => 4 # } 1..1 # Looks like you Failed 1 test of 1.
对不起,我最初误解了你的问题.仔细阅读这个问题对于提供正确答案非常有帮助.无论如何,找到哈希的差异可能会变得非常复杂.我相信有几个CPAN模块可以帮助你解决这个问题.我建议在那里找到可以处理你正在处理的数据结构来比较哈希差异.
过去,我不知道让Test :: More或Test :: Deep做你想要的好方法.有人希望有其他人来!祝好运.