【问题标题】:Can I set $? in a test?我可以设置$吗?在测试中?
【发布时间】:2012-07-26 18:40:41
【问题描述】:

我有一个 Ruby 程序。那个程序去

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

大多数时候$? 是一个Process::Status 对象。有时它是 nil。这会使程序崩溃。很容易修复,对吧?

但我想写一个测试。

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

【问题讨论】:

    标签: ruby unit-testing ipc ruby-1.9.2


    【解决方案1】:

    据我所知,您无法设置此项。通过 C 代码,全局变量实际上可以扩展为函数调用,这就是这里发生的事情 (rb_last_status_get)

    最简单的方法是定义一个更容易存根的方法,例如

    module Process
      def self.last_status
        $?
      end
    end
    

    然后使用Process.last_status 代替$?。显然,您可以在规范中将其剔除,如果您对所有神奇的全局变量感到困惑,它的可读性会更高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 2014-02-17
      • 2019-01-19
      • 1970-01-01
      • 2021-11-16
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多