minitest - TestCase's instance's condition
[#22944] TestCase uses common @name ivar
http://rubyforge.org/tracker/index.php?func=detail&aid=22944&group_id=1040&atid=4097
最もな意見だ。ただ、@nameのみならず@passedもアレだなぁ。
@passedはテスト結果がおかしくなる(十分うっとおしい問題だが)だけだけと、
@nameが狂うとErrorの嵐だとおもう、多分。__send__に怒られてArgumentErrorあたり?
ユーザがテストコードを書いて暴れまわるところと、テスト実行を握っているコンテキストが(MiniTest::Unit::TestCaseのインスタンスのそれ)いっしょなのが問題。
言葉あってるのが不安だ…。
アイディア1
触って欲しくない情報は@__meta__とか最もらしい名前に構造体にまとめて突っ込む。@__meta__が名前付けで逃げてるのは気になるけどこの際ガマン!
アイディア2
class TestCase def self.meta_table @meta_table ||= Hash.new{|h, k| h[k] = Meta.new } end def initialize(name) self.class.meta_table[self].name = name end end
とか?
テスト書く側からも触れるのは解消してないけれど、普通にテスト書くのに
self.class.meta_table[self].name = 'Who am I?'
なんて書く奴がいたら、ライブラリの中身を解説するより病院を紹介してやったほうがいいと思う。
まとめ
もともとの@__name__の案も含め、うっかり@nameといういかにも使われそうな名前でなく別のところにしまっとこう、という案だな。当たり前かもしれんけど。