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