システムコマンドとインターフェイスするいくつかのスクリプトをテストしています。それらのロジックは、システムコマンドのリターンコード、つまり$?の値に依存します。したがって、簡単な例として、スクリプトは次のように言うかもしれません。
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を使用してテストしています。)