Q: Возможно, заголовок слишком большой, и ответ, вероятно, "это зависит"?Однако предоставление практических примеров / примеров должно помочь разработчикам, таким как я, понять, когда что применять.Я начну с моей конкретной ситуации.Будете ли вы использовать специальные классы ошибок?Почему, почему нет?
Приветствуются и другие примеры, как приведенный ниже, например, когда вы используете свои собственные классы ошибок.Мне действительно интересно.
Пример: Я использую 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