Perl 在失败时强制cmp_deep显示哈希中的所有差异
我正在用Perl编写一个测试,我需要比较两个大哈希。 我使用Perl 在失败时强制cmp_deep显示哈希中的所有差异,perl,testing,hash,compare,Perl,Testing,Hash,Compare,我正在用Perl编写一个测试,我需要比较两个大哈希。 我使用cmp\u deep(),而是
cmp\u deep
(),而是
()。
我的问题是,当这些散列中有不同的东西时,程序会在中间退出。
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_深入地打印哈希之间的所有差异,而不仅仅是它们之间的第一个差异
此外,我需要忽略一些关键点。我怎样才能做到这一点呢?阅读文档对于这类事情通常很方便 您的问题几乎与文档中的用例完全相同
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做您想要的事情。希望其他人也能来!祝你好运。正如Jonathan Leffler指出的那样,显示所有差异的最佳方式是使用及其
eq\u或方法
但是您可能希望保持Test::Deep,因为它具有一些特殊的特性,如ignore()
和re()
所以,两者都要用。您只需要在失败时看到差异。示例代码:
is_deeply($this, $that, "the data matches" )
|| eq_or_diff($this, $that, "the data matches (with details)");
我认为用是不可能做到这一点的,而且还可以。测试不应该告诉你要修复什么,而是当某个东西不工作时失败,这是另一回事。测试无助于使代码正确,它只会显示错误。另外,如果你想比较散列的一些值,请明确地进行比较。我需要它,因为其他人会查看测试结果。而且散列太大了,所以仅仅打印“notok”是不够的……在这种情况下,如果测试失败,您可以插入一个命令来转储散列。我认为您的要求与is\u
作者的要求不同。仔细查看上的手册页,但是您可能需要编写自己的代码来完成需要完成的工作,因为您需要的信息是一般测试人员不需要的。也许您正在寻找?