我可以设置 $?在测试中



我有一个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 而不是 $?。您显然可以在规范中将其存根,如果您在所有魔术全局变量之间感到困惑,则更具可读性。

相关内容

  • 没有找到相关文章

最新更新