Khi thử nghiệm :: So sánh nhiều hơn như arrayrefs và hashrefs với nhau, thông báo chẩn đoán tương ứng thực sự mang tính thông tin và hiển thị chỉ mục đầu tiên. , bất kể chiều sâu làm tổ. Tuy nhiên, khi so sánh mảng arrayref hoặc hashref với một vô hướng đơn giản, nó tạo ra một vô hướng được xâu chuỗi (với địa chỉ bộ nhớ và kiểu tham chiếu) trong thông báo chẩn đoán, khó giải thích hơn.Thử nghiệm :: Thêm is_deeply không in mảng/hashrefs khi so sánh với chuỗi
Có cách nào để định cấu hình Thử nghiệm :: Thêm vào mảng in đẹp hoặc hashref theo cách tùy chỉnh (chẳng hạn như sử dụng Dữ liệu :: Dumper) không?
Đây là ví dụ có hai trường hợp kiểm tra. Việc đầu tiên cung cấp cho bạn một số thông tin chi tiết về những gì có mặt trong chương trình của bạn nhưng không mong muốn. Thông báo thứ hai thông báo cho người dùng về loại không khớp giữa chuỗi và mảngref, nhưng không in bất kỳ mục nào trong mảngref.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 2;
is_deeply(
{
a => [5],
},
{
a => [5, 6, 8],
},
'compare two hashrefs structurally (very informative output)',
);
is_deeply(
[5, 6, 8],
"",
'compare two "incompatible" values structurally (uninformative output)',
);
Và đầu ra TAP:
1..2
not ok 1 - compare two hashrefs structurally (very informative output)
# Failed test 'compare two hashrefs structurally (very informative output)'
# at test-more-failure.pl line 6.
# Structures begin differing at:
# $got->{a}[1] = Does not exist
# $expected->{a}[1] = '6'
not ok 2 - compare two "incompatible" values structurally (uninformative output)
# Failed test 'compare two "incompatible" values structurally (uninformative output)'
# at test-more-failure.pl line 16.
# Structures begin differing at:
# $got = ARRAY(0x7fe66b82cde8)
# $expected = ''
# Looks like you failed 2 tests of 2.
Nhìn vào thực hiện is_deeply
trong Test :: hơn, có vẻ không phải là cách để sử dụng một tùy chỉnh khá-in hoặc cấu hình tính cách rườm rà của mô-đun. Ít nhất không ai rõ ràng với tôi.
Đây là những gì sẽ xảy ra khi chúng ta so sánh một tài liệu tham khảo và không tham khảo:
https://metacpan.org/source/EXODIST/Test-Simple-1.302062/lib/Test/More.pm#L1121
Nó dường như được gọi _format_stack({vals => [...]})
thay vì _format_stack(...)
https://metacpan.org/source/EXODIST/Test-Simple-1.302062/lib/Test/More.pm#L1139
Nếu bạn muốn có sự khác biệt song song về cấu trúc dữ liệu, điều này thực sự tốt đẹp. Tuy nhiên, nếu bạn đang phát triển và cấu trúc dữ liệu đã thay đổi, bạn chỉ muốn thay thế định nghĩa trong mô-đun thử nghiệm, 'diag giải thích $ got' cung cấp đầu ra dễ dàng hơn để sao chép và dán. – Randall