Ich teste einige Skripte, die mit Systembefehlen interagieren. Ihre Logik hängt von dem Rückkehrcode der Systembefehle ab, d. H. Dem Wert von $ ?. So, wie ein vereinfachtes Beispiel könnte das Skript sagen:
def foo(command)
output=`#{command}`
if $?==0
'succeeded'
else
'failed'
end
end
Um richtig, diese Methoden testen zu können, ich möchte in der Lage sein, den Anruf Backquote Kernel Stub und $ gesetzt? zu einem willkürlichen Wert, um zu sehen, ob ich von der Logik in der Methode nach dem Backquote-Aufruf entsprechendes Verhalten bekomme. $? eine schreibgeschützte Variable ist, so dass die folgende funktioniert nicht:
$? = some_number
Ich kann ein paar einfache Dinge tun: $ zum Beispiel festgelegt? zu Null oder nicht Null. Zum Beispiel wird $? entweder auf 0 oder 35212 (auf meinem System, sowieso), je nach dem Wert von $ ?:
def fail_or_succeed(success)
if success
`echo foo`
else
`a-non-existent-command 2>&1`
end
end
Was würde ich ist gerne in der Lage sein zu tun, wirklich $ zu setzen? auf einen spezifischen Wert (z. B. 3 oder 122), nicht nur auf Null oder einen beliebigen Wert ungleich Null. Ich kann keinen Weg finden, dies zu tun. (Falls es wichtig ist, teste ich Test :: Unit und Mokka.)
Aha! Danke, das funktioniert. Ich hatte deine Idee ausprobiert, aber den .exitstatus Teil verpasst. Ich benutzte .to_i (in der Tat), das (in Ihrem Beispiel) 5376, nicht 21 zurückgibt. – rleber
@rleber: Es könnte so einfach sein wie 'command = '(exit 21)'' (Sie können die "bash - c "wenn Sie es in runde Klammern setzen". –
@Dennis, Nizza - es ist auch einfacher und zuverlässiger (wenn bash nicht in $ PATH ist). –