Python — тест, который проходит успешно, если исключение не возникает

Я знаю о unittest модуле Python.

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

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

Любые подсказки, пожалуйста?


person Anonymous    schedule 15.03.2009    source источник
comment
возможный дубликат Python unittest - напротив assertRaises?   -  person brandizzi    schedule 14.07.2015
comment
@brandizzi - проверьте дату этого повторяющегося вопроса;)   -  person MasterJoe    schedule 06.10.2016


Ответы (3)


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

doStuff()
self.assert_(True)

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

person Community    schedule 15.03.2009
comment
Таким образом, тест не провалится, а выдаст ошибку. На мой взгляд, подход try/except, упомянутый в другом ответе, является лучшим ответом. - person tisto; 13.05.2013

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

ОБНОВЛЕНИЕ: Как упоминает liw.fi, результат по умолчанию — успех, поэтому приведенный выше пример является чем-то вроде антипаттерна. Вероятно, вам следует использовать его, только если вы хотите сделать что-то особенное, прежде чем потерпеть неудачу. Вы также должны поймать наиболее конкретные возможные исключения.

person Hank Gay    schedule 15.03.2009
comment
Чтобы не быть педантичным, но Python использует try...except, а не try...catch - person Joe Holloway; 15.03.2009
comment
Спасибо - "ответить перед кофе" снова наносит удар. - person Hank Gay; 15.03.2009
comment
Недостатком этого является потеря исходной трассировки стека, что затрудняет отладку теста в случае сбоя. - person b4hand; 03.06.2016

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

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

Он потерпит неудачу именно тогда, когда исключение будет вызвано doStuff().

person kosii    schedule 17.01.2011
comment
Kosii-Это тоже правильное решение? stackoverflow.com/a/4319870/6648326 - person MasterJoe; 10.10.2016
comment
Я не понимаю этот синтаксис. Что он делает? - person ; 04.09.2018