Подтвердить что ты не робот

Пройдите тестирование на Python, если исключение не возникло

В инфраструктуре Python unittest существует ли способ передать unit test, если исключение не было создано, и сбой с AssertRaise в противном случае?

4b9b3361

Ответ 1

Если я правильно понял ваш вопрос, вы могли бы сделать что-то вроде этого:

def test_does_not_raise_on_valid_input(self):
    raised = False
    try:
        do_something(42)
    except:
        raised = True
    self.assertFalse(raised, 'Exception raised')

... при условии, что у вас есть соответствующий тест, конечно правильный Exception получает недопустимый ввод:

def test_does_raise_on_invalid_input(self):
    self.assertRaises(OutOfCheese, do_something, 43)

Однако, как указано в комментариях, вам нужно рассмотреть, что именно вы на самом деле тестируете. Вероятно, что тест вроде...

def test_what_is_42(self):
    self.assertEquals(do_something(42), 'Meaning of life')

... лучше, потому что он проверяет желаемое поведение системы и сбой при возникновении исключения.

Ответ 2

Многие комментарии на этой странице относятся к ошибкам и ошибкам как эквивалентные, а это не так. Правильное решение, на мой взгляд, заключается в явном отказе в тестировании, если возникло исключение. Например:.

def test_does_not_error(self):
    try:
        code_under_test()
    except ThatException:
        self.fail("code_under_test raised ThatException")

Ответ 3

Просто назовите свою функциональность, например, do_something(). Если возникает необработанное исключение, тест автоматически завершается неудачей! На самом деле нет никаких причин делать что-либо еще. Это также причина, по которой assertDoesNotRaise() не существует.


Кредит: комментарий Свена