2012-07-26 224 views
1

我有一个Ruby程序。该方案去

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

大部分时间$?Process::Status对象。偶尔它是零而不是。这使程序崩溃。很容易修复,对吧?

但我想写一个测试。

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

回答

4

据我所知你不能设置这个。通过C代码的全局变量实际上可以扩展到一个函数调用,这是在这里(rb_last_status_get

会发生什么,最简单的是定义是更容易为您存根的方法,例如

module Process 
    def self.last_status 
    $? 
    end 
end 

然后使用Process.last_status而不是$ ?.如果你对所有魔法全局之间的混淆,你可以明显地将它存根于规范中,并且它更具可读性。

相关问题