Я тестирую несколько сценариев, взаимодействующих с системными командами. Их логика зависит от кода возврата системных команд, то есть от значения $ ?. Так, в качестве упрощенного примера сценарий может сказать:
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. )