トップレベルで定義したメソッドに対して、RSpecで標準入力を扱うようなテストを書く方法

RSpecで標準入力からの入力を行うテストを書こうと思ったが、 どうやって書くのかが分からなかった。調べたところ以下のWebページが見つかった。

Umeyashikiの日記

こちらのページでは、テスト対象のオブジェクトにgetsメソッドのスタブを追加している。ただ、今回はテスト対象がトップレベルで定義されたメソッドのためうまくいかない。 Kernel.stubとかやってみてもダメだった。
リファレンスを見るとKernel#.getsはARGF.getsの省略などと書かれているので、ARGF.stubとやってみると上手く行った。

なぜこれで良いのかがいまいち分からないが、調べてもわからない。 結局は以下のようになった。

ARGF.stub(:gets).and_return("foo")