2009-03-15 1 views
13

Я знаю о unittest Модуль Python.Python - тест, который преуспевает, когда исключение не возбуждено

Я знаю о assertRaises() Метод TestCase класс.

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

Какие-либо подсказки, пожалуйста?

+0

Возможный дубликат [Python unittest - напротив assertRaises?] (Http://stackoverflow.com/questions/4319825/python-unittest-opposite-of-assertraises) – brandizzi

+0

@brandizzi - проверьте дату на этом "дублированном" вопрос;) – testerjoe2

ответ

12

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

doStuff() 
self.assert_(True) 

Это должно работать нормально. Вы можете оставить вызов self.assert_, поскольку он ничего не делает. Мне нравится указывать, что я не забыл это утверждение.

+5

Таким образом, тест не провалится, но приведет к ошибке. На мой взгляд, лучший ответ, упомянутый в другом ответе, является попыткой/исключением. – tisto

21
def runTest(self): 
    try: 
     doStuff() 
    except: 
     self.fail("Encountered an unexpected exception.") 

UPDATE: Как liw.fi упоминает, результат по умолчанию является успехом, так что пример выше что-то из антипаттерн. Вероятно, вы должны использовать его только в том случае, если хотите сделать что-то особенное перед сбоем. Вы также должны поймать наиболее конкретные исключения.

+0

Не быть педантичным, но Python использует попытку ... кроме, а не попробовать ... catch –

+1

Спасибо - «ответ перед кофе» снова получил забастовку. –

+3

Это недостаток, связанный с потерей исходной трассировки стека, что затрудняет тестирование при сбое. – b4hand

6

Я использую этот шаблон для вида утверждения вы спросили:

with self.assertRaises(Exception): 
    try: 
     doStuff() 
    except: 
     pass 
    else: 
     raise Exception 

Это подведет точно, когда возбуждается исключение DoStuff().

+0

Kosii-Это тоже правильное решение? http://stackoverflow.com/a/4319870/6648326 – testerjoe2

Смежные вопросы