perl – 强制cmp_deep显示失败时哈希值的所有差异

前端之家收集整理的这篇文章主要介绍了perl – 强制cmp_deep显示失败时哈希值的所有差异前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在用Perl编写测试,我需要比较两个大哈希.
我使用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做你想要的好方法.有人希望有其他人来!祝好运.

猜你在找的Perl相关文章