我正在测试一些与系统命令交互的脚本。它们的逻辑取决于系统命令的返回码,即$?的值。因此,作为一个简化的示例,脚本可能会说:
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 进行测试。)