【问题标题】:Rspec and System InteractionRspec 和系统交互
【发布时间】:2011-04-07 15:03:00
【问题描述】:

我有一个将运行多个系统命令的程序。我知道如何做到这一点的最简单方法是使用 ` 符号。我想为这些工具构建测试,而实际上不必在系统上运行这些系统命令。

有没有办法模拟系统的响应?

【问题讨论】:

  • 为这些系统命令编写包装器怎么样?然后嘲笑他们的反应。
  • 这可以作为一个后备,但十分之九我发现 Ruby 有一些简单的魔法命令可以解决我所有的问题。我希望这不是第一次。 ;)

标签: ruby testing operating-system mocking rspec


【解决方案1】:

如果您的代码运行大量外部命令,您应该创建一个简单的包装器并模拟它:

def wants_to_run_external_command(command_runner)
  command_runner.run('echo "hello world"')
end

并像这样测试它:

it 'echos "hello world"' do
  command_runner = double()
  command_runner.should_receive(:run).with('echo "hello world"')
  subject.wants_to_run_external_command(command_runner)
end

如果您想更整洁,您可以使用命令运行程序实例初始化您的对象,这样您当然不必将其传递给方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2012-01-03
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多