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

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