use_okがprove -lで実行すると通るのにperl -Ilibで実行すると通らなかった話
use Test::More; use_ok 'Foo::Bar'; done_testing;
みたいなテストを実行するとき、まあ普通は prove -l
する。1アサートごとの結果を見たい場合も prove -lv
とかでいいんだけど、このときは忘れてて perl -Ilib
で実行した。
上のようなテストだと通るんだけど、今回下のようなテストになってて通らなかった。
use File::Basename qw(dirname); use Test::More; chdir dirname __FILE__; use_ok 'Foo::Bar'; done_testing;
こうして最低限のコードにするとわかりやすいんだけど、 'lib'
の指し示す先が変わってしまうので通らないわけだ。
ただそうなると、なぜ prove -l
では通るのか?
軽く App::Prove
を読んでみると、 'lib'
を絶対パスにして処理していたのでそのせいで chdir
の影響を受けなかったっぽい。
(当然 lib/Foo/Bar.pm
は存在し、かつ use
できる前提)
今日はたまたまそれほど解決にそれほど時間かからなかったからいいけど、勘でデバッグするのって駄目だよなあ。バグ見つけたらとにかく二分探索しつつ問題の最小化していかないと。そういう癖つけないと。