ruby - 有没有办法设置$的值?在 Ruby 的模拟中?

标签 ruby testing ruby-mocha

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

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

为了能够正确测试这些方法,我希望能够将内核反引号调用 stub ,并设置 $?到任意值,以查看我是否在反引号调用后从方法中的逻辑中获得适当的行为。 $?是一个只读变量,因此以下内容不起作用:

$? = 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 进行测试。)

最佳答案

编辑: 使用 Dennis Williamson 的建议:

command = "(exit 21)"

并使用 if $?.exitstatus == 0 而不是 if $? == 0

关于ruby - 有没有办法设置$的值?在 Ruby 的模拟中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4589460/

相关文章:

c - C 扩展中的 Ruby 关键字参数

ruby-on-rails - 从每个类别中获得 5 个问题,如果少于 5 个 - 重复现有直到 5

ruby - 如果字符串以该字符开头,则从字符串中删除该字符?

database - 有效地测试数据库后端

testing - 如何将 TestCafé 测试组织为多个步骤?

javascript - 进行浏览器测试时 Windows 版本重要吗?

Ruby Mocha 期望第一个参数是一个符号

ruby-on-rails - 使用 Mocha 进行模拟实际上如何让您测试函数中的逻辑?

ruby - 将 Unicode 中的阿拉伯语和日语文本按字母顺序排列?