- あるオブジェクトOのメソッドAを呼ぶと内部変数Xの値が変わるとする。
- メソッドAの目的はXの値を更新することだが、返り値からXの値を知ることは出来ない。
- オブジェクトOの他のメソッドからXの値を直接知ることは出来ない。
以上のような状況のとき、メソッドAのテストってどうすればいいんだろうと思ったんだけど、シンプルにインスタンス変数にアクセスすることにした。メソッドAの正しい挙動は内部変数を変更することなので、そのテストは、変数の変更を検知することだと思ったからだ。
というわけでコードは以下。
require 'minitest/autostart'
O = Struct.new(:x)
class TestO < Minitest::Test
def test_a
o = O.new
o.a #x => true
assert o.instance_variable_get(:@x)
end
end
他にいいやりかたがあるのかもしれないけど、多分これが一番スッキリする。