如何为程序退出编写测试用例

时间:2014-07-22 13:09:17

标签: ruby rspec

我有一个代码段,当我使用gets从exit收到STDIN输入时,我将终止该程序。我如何编写相同的rspec测试用例。

以下是代码段。

class CommandProcessor
    attr_accessor :input
    attr_accessor :operation
    def parser
        while true
            input = gets.chomp
            operation = input.split(' ')[0]
            param = input.split(' ')[1]
            if operation.eql? 'exit'
                exit
            end
        end
    end
end

以下是我的尝试。

describe "CommandProcessor" do
    it "will exit on input exit" do
        cmd = CommandProcessor.new
        cmd.parser
        expect { it_will_exit }.raise_exception(SystemExit) 
    end
end

更新

之前我尝试了Leonid Mirsky的方法并得到了这个错误:

lib/calculator.rb:37:in `parser': undefined method `chomp' for nil:NilClass (NoMethodError)

1 个答案:

答案 0 :(得分:1)

您可以在cmd对象本身上存根gets方法。

使用以下规范代码:

describe "CommandProcessor" do
  it "will exit on input exit" do
    cmd = CommandProcessor.new
    cmd.stub(:gets) {"exit\n"}
    expect { cmd.parser }.to raise_error SystemExit
  end
end