Есть ли способ установить значение $? в имитации Ruby?

Я тестирую несколько сценариев, взаимодействующих с системными командами. Их логика зависит от кода возврата системных команд, то есть от значения $ ?. Так, в качестве упрощенного примера сценарий может сказать:

def foo(command)
  output=`#{command}`
  if $?==0
    'succeeded'
  else
    'failed'
  end
end

Чтобы иметь возможность правильно протестировать эти методы, я хотел бы иметь возможность исключить вызов обратной кавычки ядра и установить $? на произвольное значение, чтобы увидеть, получу ли я соответствующее поведение от логики в методе после вызова обратной кавычки. $? является переменной только для чтения, поэтому следующее не работает:

$? = some_number

Я могу делать некоторые простые вещи: например, установить $? к нулю или ненулевой. Например, установит $? на 0 или 35212 (в моей системе, во всяком случае), в зависимости от значения $ ?:

def fail_or_succeed(success)
  if success
    `echo foo`
  else
    `a-non-existent-command 2>&1`
  end
end

Что я действительно хотел бы сделать, так это установить $? на конкретное значение (например, 3 или 122), а не просто ноль или произвольное ненулевое значение. Я не могу придумать, как это сделать. (Если это важно, я тестирую с помощью Test :: Unit и Mocha. )

8
задан Jordan Running 7 September 2016 в 19:45
поделиться