patrones de error en los carriles, aumento “Texto evaluar a RuntimeError” o MyModule aumento :: error personalizado?
-
05-10-2019 - |
Pregunta
Q: El título es tal vez demasiado grande de pregunta y la respuesta probablemente es "depende"? Sin embargo, proporcionar algunos casos prácticos / ejemplos deberían ayudar a los desarrolladores, como yo, reconocen cuándo aplicar lo. Voy a empezar con mi situación particular. ¿Le haría o no utilizar las clases de error personalizadas? ¿Por qué por qué no?
Otros ejemplos como el de abajo se dan la bienvenida, como cuando se utilicen sus propias clases de error. Realmente estoy preguntando.
Ejemplo: Estoy usando httparty a nuestro servicio de consulta web rieles aplicación de algunos datos. Se utiliza la autenticación básica. Voy a pegar tanto el código de prueba e implementación. Lo que debe esperar mi prueba, RuntimeError o 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
La aplicación:
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
Solución
In most cases, I would never rescue from or raiseRuntimeError
. That could be something completely unrelated to your code. It's best to use a custom exception.
Generally, you can call errors whatever you want as long as you namespace them within your library's constant. For example, if someone gets their username wrong you could have YourApp::InvalidUsername
as an exception object which would be defined like this:
module YourApp
class InvalidUsername < StandardError
def message
super("Yo dawg, you got your username wrong all up in here")
end
end
end
When you raise YourApp::InvalidUsername
you'll see that message appear.