将 $stdin 重定向到 Ruby 中的字符串

Redirect $stdin to string in Ruby

我正在为我的 class 编写单元测试,它从标准输入读取输入。在单元测试中,我希望我可以将标准输入流重定向到一个字符串。

我怎样才能做到这一点?

回答你的字面问题:与常量STDIN不同,$stdin只是一个全局变量,你可以用另一个IO对象替换它:

require 'stringio'
$stdin = StringIO.new("foo\nbar")
2.times { puts gets }
# => foo
# => bar

但使用适当的模拟框架可能是更好的主意,例如 this