以前Test::Moreで書いたテストが通らなくて、テスト結果を見たのですが、結構長いテキストの比較だったので、、gotとexpectedで全部だされてもなぁ...と思ったのですが、Test::Baseは、Test::Moreと互換性があるんだった、と思いだして、変えてみた。
use Test::More ...;
のところを、
use Test::Base ...;
とするだけ。
こうすることで、diffが表示されるようになります。簡単な例だと、
#!/usr/bin/perl use Test::More qw/no_plan/; is(<<END_GOT, <<END_EXPECTED); aaa bbb ccc END_GOT aaa bob ccc END_EXPECTED
Test::Moreだと、
not ok 1 # Failed test in scripts/test_base.pl at line 5. # got: 'aaa # bbb # ccc # ' # expected: 'aaa # bob # ccc # ' 1..1 # Looks like you failed 1 test of 1.
Test::Baseにしたら、
not ok 1 - # @@ -1,3 +1,3 @@ # aaa # -bob # +bbb # ccc # # Failed test ' # @@ -1,3 +1,3 @@ # aaa # -bob # +bbb # ccc # ' # in scripts/test_base.pl at line 5. 1..1 # Looks like you failed 1 test of 1.
こんな感じでdiff表示してくれます。
この機能が欲しくない時は、no_diff関数をよびだすが、$ENV{TEST_SHOW_NO_DIFFS} に、1入れとけば、diffは表示されず、従来の表示となります。
てわけで、Test::Moreを使ってるとこは、Test::Baseで置き換えちゃったほうがいいなぁと思いました。