# "うっかりオーバーライド" をテストする Test::NoOverride しれっとクラス継承して、うっかりメソッドをオーバーライドしちゃうこと、ありますよね? 僕は、ありません。 というわけで書いてみた。 ## Test::NoOverride {{cpan: Test::NoOverride}} 【t/override.t】みたいな感じのテストで use Test::NoOverride; no_override('Some::Class'); 上のように書くだけ。 `Some::Class` が継承してるクラスのメソッドを、オーバーライドしてるとテストこけます。という目論見。(no_* っていう命名は嫌がられそうだけど逆を考えることはなさそうなのでそのまま付けた。) 明示的にオーバーライドしてる場合は、`exclude` にメソッドを並べます。 no_override( 'Some::Class', exclude => [qw/ method /], # methods which you override specifically. ); 継承ツリーの中の一部のモジュールだけバージョン上がってオーバライドまわりおかしくなるとかそういうのも検知できたりするかもしれない(そういう状況、なかなかまれだと思うけど)。 なお、いまのところシンプルな継承しか扱ってなくて、{{cpan: Moo}} とか {{cpan: Mouse}} とか {{cpan: Moose}} とかはどうなるっけというの見てない。あと、`new` はデフォルト無視でいいかなとか思ってたりもする。というか、すでにこういうのありそうな気もする。 まあ、もうすぐ秋だしいいか。