2011-04-07 45 views
1

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

有没有一种方法可以模拟来自系统的响应?

+3

如何为这些系统命令编写包装?然后嘲笑他们的反驳。 – 2011-04-07 15:07:30

+0

这会作为一个回落,但9次10我发现,Ruby有一些简单的魔法命令,将解决我所有的问题。我希望这不是第一次不是。 ;) – Drew 2011-04-07 15:10:58

回答

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 

如果你想成为整洁您用命令runner实例初始化你的对象,所以你当然不必将它传递给方法。