Ruby on rails 如何在ruby中对超时异常进行单元测试
我想测试一个调用服务的方法,如果调用该服务超时,我会向用户显示一个负面反馈。如何测试超时用例 我的方法如下所示:Ruby on rails 如何在ruby中对超时异常进行单元测试,ruby-on-rails,ruby,unit-testing,Ruby On Rails,Ruby,Unit Testing,我想测试一个调用服务的方法,如果调用该服务超时,我会向用户显示一个负面反馈。如何测试超时用例 我的方法如下所示: def method x = callservice() if x[:value] display_positve_feedback("positive") else display_negative_feedback("negative") end rescue Timeout::Error => e display_negativ
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,但如何使该服务超时以检查超时用例???您不使用返回码。如果添加它,可以测试方法结果 例如:
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
抑制异常通常不是我推荐给任何人的好做法
当您捕获(rescue)超时异常时,在rescue代码中重新引发它(或您自己的特定于应用程序的异常),并让调用方(您的测试)检查超时是否引发异常
例如,根据您使用的测试框架,您可以使用assert\u raise
或expectraise\u error
使用异常时,调用代码只需要知道潜在的异常,而不必检查特定的返回值,这使代码更简单、更清晰。使用
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
您的方法有语法错误(在
def method
?)之后缺少begin)。@knut将begin
添加到方法顶部可以修复语法错误,但是删除额外的end
更可取(def method;rescue;end
优于def method;begin;rescue;end;end
)。