Мои пользовательские классы исключений:Как протестировать пользовательское исключение, сообщение с Python Nose
class MyCustomException(Exception):
pass
class MyCustomRestException(MyCustomException):
def __init__(self, status, uri, msg=""):
self.uri = uri
self.status = status
self.msg = msg
super(MyCustomException, self).__init__(msg)
def __str__(self):
return "HTTP ERROR %s: %s \n %s" % (self.status, self.msg, self.uri)
Мой Тест
# note: @raises(MyCustomRestException) works by itself
@raises(MyCustomRestException, 'HTTP ERROR 403: Invalid User')
def test_bad_token():
sc = SomeClass('xxx', account_number)
result = ec.method_that_generates_exception()
Вот что нос выплевывает обратно
12:52:13 ~/sandbox/ec$ nosetests -v
Failure: AttributeError ('str' object has no attribute '__name__') ... ERROR
======================================================================
ERROR: Failure: AttributeError ('str' object has no attribute '__name__')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/nose/loader.py", line 390, in loadTestsFromName
addr.filename, addr.module)
File "/usr/local/lib/python2.7/site-packages/nose/importer.py", line 39, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/usr/local/lib/python2.7/site-packages/nose/importer.py", line 86, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/ec/tests/my_client_tests.py", line 16, in <module>
@raises(MyCustomRestException, 'HTTP ERROR 403: Invalid User')
File "/usr/local/lib/python2.7/site-packages/nose/tools/nontrivial.py", line 55, in raises
valid = ' or '.join([e.__name__ for e in exceptions])
AttributeError: 'str' object has no attribute '__name__'
----------------------------------------------------------------------
Ran 1 test in 0.012s
FAILED (errors=1)
Итак ...
Мои вопросы два раза:
- Как исправить эту ошибку?
- Как я могу проверить (по отдельности или в целом):
- Исключение Тип
- Exception.status
- Exception.uri
- Exception.msg
Решение: с помощь от alynna (ниже)
Это отлично работает.
def test_bad_token():
sc = SomeClass('xxx', account_number)
with assert_raises(MyCustomRestException) as e:
sc.method_that_generates_exception()
assert_equal(e.exception.status, 403)
assert_equal(e.exception.msg, 'Invalid User')
@raises (MyCustomRestException) работает как MyCustomRestException является классом исключений. – doremi