Юнитест в Джанго. Как получить сообщение об исключении от assertRaises ()? - PullRequest
2 голосов
/ 22 апреля 2010

Я использовал assertRaises () для проверки, будет выдано исключение, и с этим нет проблем.

Мой вопрос: есть ли способ получить сообщение об исключении от assertRaises ()?Я хотел бы также подтвердить различные типы exceptiosn, проанализировав сообщение об исключении ..

Ответы [ 3 ]

2 голосов
/ 23 апреля 2010

Я использую следующий декоратор, вдохновленный одним из носа :

def raises(exception, message):
    @decorator
    def decorate(func, *args, **kwargs):
        name = func.__name__
        try:
            func(*args, **kwargs)
        except exception, e:
            if message is not None:
                assert_equal(str(e), message)
        except:
            raise
        else:
            msg = "%s() did not raise %s" % (name, exception.__name__)
            raise AssertionError(msg)
    return decorate

Так что я могу сделать что-то вроде:

class TestMyThing(TestCase):
    @raises(ValueError, "T should not exceed 100, but has value 120")
    def test(self):
        some_code_that_provoke_exception()

@decorator из пакета оформителя . Вы можете написать декоратор руками, если по какой-то причине не хотите вводить зависимость.

0 голосов
/ 23 апреля 2010

Я только что нашел решение, просто создаю класс-оболочку и использую его для утверждения исключения.

@staticmethod
def assertRaises(exception, apicall, *args, **kwargs):
    try:
        apicall(*args, **kwargs)
    except exception as e:
        return e
    finally:
        pass;
0 голосов
/ 23 апреля 2010

Если разные сообщения об исключениях соответствуют другому тестируемому условию, они, вероятно, должны быть двумя разными исключениями. Однако они могут легко наследоваться от того же базового класса исключений, поэтому ваш другой код обработки исключений не обязательно должен быть изменен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...