我有一个Ruby程序。该计划
IO.popen('blah') { ... }
if $?.success?
...
大部分时间$?
都是Process::Status
个对象。偶尔它会变为零。那会导致程序崩溃。很容易解决,对吧?
但我想写一个测试。
我有模拟IO.popen调用的技术,但我不能将$?
设置为nil,因为它是只读的。如何将$?
设置为nil?
答案 0 :(得分:4)
据我所知你不能设置这个。通过C代码,全局变量实际上可以扩展为函数调用,这就是这里发生的事情(rb_last_status_get
)
最简单的方法是定义一个更容易存根的方法,例如
module Process
def self.last_status
$?
end
end
然后使用Process.last_status
代替$?。你可以在规范中明确地将其排除在外,如果你对所有魔法全局变量感到困惑,它会更具可读性。