2012-07-26 190 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而不是$ ?.如果你對所有魔法全局之間的混淆,你可以明顯地將它存根於規範中,並且它更具可讀性。

相關問題