1

我有一个 Ruby 程序。那个程序去

IO.popen('blah') { ... }
if $?.success?
   ...

大多数时候$?是一个Process::Status对象。有时它是 nil。这会使程序崩溃。很容易修复,对吧?

但是我想写一个测试。

我有模拟 IO.popen 调用的技术,但我不能设置$?为零,因为它是只读的。我怎样才能设置$?为零?

4

1 回答 1

4

据我所知,你不能设置这个。通过 C 代码,全局变量实际上可以扩展为函数调用,这就是这里发生的事情 ( rb_last_status_get)

最简单的方法是定义一个更容易存根的方法,例如

module Process
  def self.last_status
    $?
  end
end

然后使用Process.last_status而不是 $?。您显然可以在规范中排除它,如果您对所有神奇的全局变量感到困惑,它会更具可读性。

于 2012-07-30T12:44:40.910 回答