加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:13:11 所属栏目:大数据 来源:网络整理
导读:我正在用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 ); 输出是
我正在用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做你想要的好方法.有人希望有其他人来!祝好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读