问:标题可能太大问题,答案可能是“它取决于”?但是,提供一些实际案例/示例应该可以帮助开发人员像我一样,识别何时应用什么。我会从我的特殊情况开始。你或者你不会使用自定义错误类吗?为什么/为什么不呢?
欢迎使用下面的其他示例,就像您使用自己的错误类一样。我真的很纳闷。
例如:我正在使用httparty向我们的rails网络服务应用查询某些数据。它使用基本身份验证。我将粘贴测试代码和实现。我的测试应该期待什么, RuntimeError 或 SomeCustomError ?
class MyIntegrationTest < Test::Unit::TestCase
context "connecting to someapp web service" do
should "raise not authorized if username is wrong" do
#get default MyWebserviceInterface instance, overriding username setting
ws_endpoint = build_integration_object(:username => 'wrong_username')
assert_raises RuntimeError do #TODO error design pattern?
ws_endpoint.get
end
end
end
end
实施:
class MyWebserviceInterface
include HTTParty
#Basic authentication and configurable base_uri
def initialize(u, p, uri)
@auth = {:username => u, :password => p}
@uri = uri
end
def base_uri
HTTParty.normalize_base_uri(@uri)
end
def get(path = '/somepath.xml', query_params = {})
opts = {:base_uri => base_uri, :query => query_params, :basic_auth => @auth}
response = self.class.get(path, opts)
evaluate_get_response(response)
response.parsed_response
end
def evaluate_get_response(response)
code = response.code
body = response.body
if code == 200
logger.debug "OK - CREATED code #{code}"
else
logger.error "expected code 200, got code #{code}. Response body: #{body}"
#TODO error design pattern? raise the above logged msg or a custom error?
raise SomeAppIntegration::Error(code, body)
end
end
答案 0 :(得分:2)
在大多数情况下,我从不拯救或提升RuntimeError
。这可能与您的代码完全无关。最好使用自定义异常。
通常,只要在库的常量中命名它们,就可以随意调用错误。例如,如果某人的用户名错误,您可以将YourApp::InvalidUsername
作为异常对象,其定义如下:
module YourApp
class InvalidUsername < StandardError
def message
super("Yo dawg, you got your username wrong all up in here")
end
end
端
当您raise YourApp::InvalidUsername
时,您会看到该消息。