Python unittest: как мне проверить аргумент в Исключениях? - PullRequest
5 голосов
/ 19 мая 2009

Я проверяю исключения, используя unittest, например:

self.assertRaises(UnrecognizedAirportError, func, arg1, arg2)

и мой код повышает:

raise UnrecognizedAirportError('From')

Что хорошо работает.

Как мне проверить, что аргумент в исключении - это то, что я ожидаю?

Я хочу как-то утверждать, что capturedException.argument == 'From'.

Надеюсь, это достаточно ясно - заранее спасибо!

Tal.

Ответы [ 2 ]

11 голосов
/ 19 мая 2009

Вот так.

>>> try:
...     raise UnrecognizedAirportError("func","arg1","arg2")
... except UnrecognizedAirportError, e:
...     print e.args
...
('func', 'arg1', 'arg2')
>>>

Ваши аргументы в args, если вы просто подкласс Exception.

См. http://docs.python.org/library/exceptions.html#module-exceptions

Если класс исключения является производным от стандартный корневой класс BaseException, соответствующее значение присутствует как Атрибут args экземпляра исключения.


Редактировать Большой пример.

class TestSomeException( unittest.TestCase ):
    def testRaiseWithArgs( self ):
        try:
            ... Something that raises the exception ...
            self.fail( "Didn't raise the exception" )
        except UnrecognizedAirportError, e:
            self.assertEquals( "func", e.args[0] )
            self.assertEquals( "arg1", e.args[1] )
        except Exception, e:
            self.fail( "Raised the wrong exception" )
1 голос
/ 19 мая 2009

assertRaises немного упрощенно и не позволяет вам проверять детали повышенного исключения за его пределами, принадлежащего указанному классу. Для более детального тестирования исключений вам нужно «свернуть свое собственное» с помощью блока try/except/else (вы можете сделать это раз и навсегда в методе def assertDetailedRaises, который вы добавляете в свой собственный общий подкласс тестового примера unittest, тогда пусть все ваши тестовые примеры наследуют ваш подкласс, а не unittest).

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