1. あるオブジェクトOのメソッドAを呼ぶと内部変数Xの値が変わるとする。
  2. メソッドAの目的はXの値を更新することだが、返り値からXの値を知ることは出来ない。
  3. オブジェクト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

他にいいやりかたがあるのかもしれないけど、多分これが一番スッキリする。