如何编写rspec测试用例来测试一个方法和异常条件的成功执行呢?

时间:2013-09-15 16:50:16

标签: ruby unit-testing rspec

我想编写一个rspec单元测试用例,这样如果存在互联网连接,它将连接到gmail,否则会引发异常。

我曾尝试写过一些内容,但服务器只是问题的一部分。 我怎么能写一个单元测试用例,以便它可以测试两者,即。如果无法连接gmail,将断言异常将测试成功连接。

describe "#will create an authenticated gmail session" do
    it "should connect to gmail, if internet connection exists else raise exception" do
       @mail_sender = MailSender.new
       lambda { @mail_sender.connect_to_gmail}.should raise_error
    end
end

方法定义

def connect_to_gmail
    begin
      gmail = Gmail.new('abc@gmail.com', 'Password123' )
    rescue SocketError=>se
       raise "Unable to connect gmail #{se}"
    end
end

1 个答案:

答案 0 :(得分:2)

您应该在这里使用stubsshould_receive

案例1 (存在互联网连接时的行为):

it "should connect to gmail, if internet connection exists" do
  Gmail.should_receive(:new)
  @mail_sender = MailSender.new
  -> { @mail_sender.connect_to_gmail}.should_not raise_error
end

也许您想要返回一些对象(Gmail.should_receive(:new).and_return(some_object))并继续使用此存根对象

案例2 (互联网连接不存在时的行为):

it "should raise error to gmail, if internet connection does not exist" do
  Gmail.stub(:new) { raise SocketError }
  @mail_sender = MailSender.new
  -> { @mail_sender.connect_to_gmail}.should raise_error
end

我希望此代码可以帮助您