В инфраструктуре Python unittest
существует ли способ передать unit test, если исключение не было создано, и сбой с AssertRaise в противном случае?
Пройдите тестирование на Python, если исключение не возникло
Ответ 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()
не существует.
Кредит: комментарий Свена