我有一个Ruby程序。该计划去
IO.popen('blah') { ... }
if $?.success?
...
大多数情况下,$?
是一个Process::Status
对象。偶尔是零。这会使程序崩溃。很容易修复,对吧?
但我想写一个测试。
我有模拟 IO.popen 调用的技术,但我无法将$?
设置为 nil,因为它是只读的。如何将$?
设置为零?
据我所知,您无法设置此选项。通过 C 代码全局变量实际上可以扩展到函数调用,这就是这里发生的事情 ( rb_last_status_get
(
最简单的方法是定义一个更容易存根的方法,例如
module Process
def self.last_status
$?
end
end
然后使用 Process.last_status
而不是 $?。您显然可以在规范中将其存根,如果您在所有魔术全局变量之间感到困惑,则更具可读性。