4

Perl でテストを書いていますが、2 つの大きなハッシュを比較する必要があります。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ハッシュ間の最初の違いだけでなく、ハッシュ間のすべての違いを強制的に出力するにはどうすればよいですか?

さらに、無視しなければならないキーがいくつかあります。どうやってやるの?

4

2 に答える 2

2

ドキュメントを読むことは、この種の場合に便利です。

あなたの問題は、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 をあなたが望むようにするための良い方法がわかりません。うまくいけば、他の誰かが一緒に来なければならないでしょう!幸運を。

于 2013-10-07T21:42:21.970 に答える