我想测试一个调用服务的方法,如果对该服务的调用超时我向用户显示负面反馈。如何对超时用例进行单元测试?
我的方法如下:
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 :(得分: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
现在,您可以在true
,false
或nil
上进行测试。
答案 1 :(得分:0)
抑制异常通常不是我推荐给任何人的好习惯。
当您捕获(救援)超时异常时,在救援代码中重新提升它(或您自己的应用程序特定的异常)并让调用者(您的测试)检查是否会因超时而抛出异常。
例如,您可以使用assert_raise
或期望raise_error
,具体取决于您使用的测试框架。
使用异常,调用代码只需知道潜在的异常,而不必检查特定的返回值,这使得代码更简单,更清晰。
答案 2 :(得分: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