Rspec和系统交互

时间:2011-04-07 15:03:01

标签: ruby testing operating-system mocking rspec

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

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

1 个答案:

答案 0 :(得分:0)

如果你的代码运行了很多外部命令,你应该创建一个简单的包装器并模拟:

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

如果你想要更整洁,你可以使用命令运行符实例初始化你的对象,这样你就不必将它传递给方法了。