Test::Baseを使ってみてます。とても簡単。
use Test::Base; run_is; __END__ === --- i A --- e A
意味はないけど。ミニマムだとこんなんでいい。
入力: A+改行
出力: A+改行
が、同じなので、テストはOK。run_is は「同じ」のテストです。
普通は、run_is i => 'e'; などと書きますが、別にそう書かなくても、Test::Baseは推測してくれます。
で、数字のテストをしてみました...
use Test::Base; sub hoge{ $_[0] / 10;} filters { i => [ 'chomp', 'hoge'], e => [ 'chomp'], }; run_is i => 'e'; __END__ === sippai dayo --- i 1000 --- e 100
これは、入力にフィルタを指定しています。
i には、chomp と、hoge。
e には、chomp。
hogeは自分で定義した関数。入力($_[0])を10で割っています。
ところが、結果。
not ok 1 - sippai dayo ' Failed test 'sippai dayo # in t/faile.t at line 11. # got: '1000' # expected: '100' 1..1 # Looks like you failed 1 test of 1.
なぜかフィルタが効いておらず、1000がgotされています。
これは、バグらしい仕様とのこと(コメント参照)。
http://rt.cpan.org/Public/Bug/Display.html?id=17276#txn-159555
で、下記のようにするといい。
sub hoge{ $_ = $_[0] / 10;}
てわけで、ちょっとはまりました。