2015-12-08 59 views
0

我想测试调用服务的方法,如果对该服务的调用超时,我会向用户显示负面反馈。如何单元测试超时用例?如何在ruby中单元测试超时异常的方法

我的方法是这样的:

def method 
    x = callservice() 
    if x[:value] 
    display_positve_feedback("positive") 
    else 
    display_negative_feedback("negative") 
    end 
    rescue Timeout::Error => e 
    display_negative_feedback("Timeout, please wait for 5 mins and check again") 
    end 
end 

我都嘲笑callservice但如何我作出这样的服务超时检查超时使用情况???

+0

您的方法有一个语法错误('def method'后面缺少一个开始?)。 – knut

+1

@knut在方法的顶部添加'begin'会修正语法错误,但是最好删除多余的'end'('def method; rescue; end'比'def method; begin; rescue;结束;结束')。 –

回答

0

您不使用返回码。如果添加它,您可以测试方法结果。

例子:

def method 
    begin 
    x = callservice() 
    if x[:value] 
     display_positve_feedback("positive") 
     return true 
    else 
     display_negative_feedback("negative") 
     return false 
    end 
    rescue Timeout::Error => e 
     display_negative_feedback("Timeout, please wait for 5 mins and check again") 
     return nil 
    end 
    raise "This should never happen" 
end 

现在你可以在truefalsenil测试。

0

抑制异常通常不是我推荐给任何人的好习惯。

当您捕获(救援)超时异常时,请在救援代码中重新提升它(或您自己的应用程序特定的一个),并让调用程序(您的测试)检查超时抛出异常。

例如,您可以使用assert_raise或期望raise_error,具体取决于您使用的测试框架。

使用异常,调用代码只需要知道潜在的异常,而不必检查特定的返回值,这使代码更简单,更清晰。

0

存根callservice方法筹集Timeout::Error。你将如何做,取决于你正在使用的测试框架。例如,在RSpec中它可能看起来像这样:

my_obj.stub(:callservice) { raise Timeout::Error } 

expect(my_obj).to receive(:display_negative_feedback) 
    .with("Timeout, please wait for 5 mins and check again") 

my_obj.method