Как использовать Python unittest assertRaises, чтобы проверить, что функция не выдает никаких исключений? - PullRequest
3 голосов
/ 05 января 2012

Я пытаюсь проверить, не выдает ли какая-либо функция какие-либо исключения, используя модуль unittest. Это возможно? Я знаю только о методе assertRaises, но этот просто проверяет наличие исключений, а аргумент None не работает для аргумента типа Exception ...

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 05 января 2012

Так что просто вызовите функцию, и если она вызовет исключение, она будет сообщена как ОШИБКА, а не как сбой, что означает, что ваш бегун юнит-тестов остановится (нет возможности продолжить его), если вы хотите сообщить об этом как об отказе, вы можете делай так:

try:
   somefunction()
except:
   self.fail("....")
2 голосов
/ 05 января 2012

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

try:
   foo()
except:
   raise AssertionError('should not raise exception')
0 голосов
/ 20 апреля 2012

Я столкнулся с той же проблемой для моих модульных тестов.Муад и Майкл правы, но для более чистого способа обработки утверждения для исключения последовательным методом.

class TestCase(unittest.TestCase):
    def assertNoRaise(self, callableObj):
        try:
            callableObj()
        except:
            raise AssertionError('shouldn\'t raise an exception')

    def assertAnyRaise(self, callableObj):
        try:
            callableObj()
        except:
            return
        raise AssertionError('should raise an exception')

или отделите вышеперечисленный класс от наследования и смешайте его с unittest.TestCase.в любом случае будет работать

и вариант использования

class my_test(TestCase):
    def setUp(self):
        pass
    def tearDown(self):
        pass

    def test_assertion(self):
        self.assertAnyRaise(lambda: 1+'a')
        self.assertNoRaise(lambda: 1+1)

извините, пожалуйста, мой плохой английский.

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