1

在为以下内容编写单元测试时:

def foo()
  popen_response = ""
  IO.popen(@packaging_cmd, :err=>[:child, :out]) {|io| popen_response = io.read }
  rc = $?
  @log.debug{"Response from IO.popen() : #{popen_response}. rc: '#{rc}'"}
  if rc.exitstatus != 0
    @log.error{"Packaging failed. rc: '#{rc}'"}
    raise PackagingError.new("Packaging failed. rc: '#{rc}'")
  end
end

我被卡住了,因为我不知道如何模拟/存根$?评估结果。我可以通过创建一个返回$?并模拟该函数或修补传递给的命令的函数来破解IO.popen(),但我想知道在 RR 中是否有任何我可以使用的官方方式。

我正在使用rr库存Test::Unit::TestCase

require 'test/unit'
require 'rr'
4

1 回答 1

1

我不确定您使用的是哪个模拟框架,但在 RSpec 中:

allow_any_instance_of(Process::Status).to receive(:exitstatus).and_return(0)
于 2016-09-08T00:25:29.097 回答