Practice of Programming

プログラム とか Linuxとかの話題

use Test::Base instead of Test::More

以前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で置き換えちゃったほうがいいなぁと思いました。