Ответ 1
try:
myFunc()
except ExceptionType:
self.fail("myFunc() raised ExceptionType unexpectedly!")
Я хочу написать тест, чтобы установить, что Исключение не возникает в данном случае.
Просто проверить, если exception поднят...
sInvalidPath=AlwaysSuppliesAnInvalidPath()
self.assertRaises(PathIsNotAValidOne, MyObject, sInvalidPath)
... но как вы можете сделать напротив.
Что-то вроде этого, что я после...
sValidPath=AlwaysSuppliesAValidPath()
self.assertNotRaises(PathIsNotAValidOne, MyObject, sValidPath)
try:
myFunc()
except ExceptionType:
self.fail("myFunc() raised ExceptionType unexpectedly!")
Просто вызовите функцию. Если он вызывает исключение, инфраструктура unit test будет отмечать это как ошибку. Вы могли бы добавить комментарий, например:
sValidPath=AlwaysSuppliesAValidPath()
# Check PathIsNotAValidOne not thrown
MyObject(sValidPath)
Привет. Я хочу написать тест, чтобы установить, что Исключение не возникает в данном случае.
Это предположение по умолчанию - исключения не возникают.
Если вы ничего не говорите, это подразумевается в каждом отдельном тесте.
Вам не нужно на самом деле писать какое-либо утверждение для этого.
Я являюсь оригинальным плакатом, и я принял вышеупомянутый ответ DGH, не используя его сначала в коде.
Как только я использовал, я понял, что ему нужно немного настроить, чтобы на самом деле сделать то, что мне было нужно (честно говоря, DGH он/она сказал "или что-то подобное"!).
Я подумал, что стоит публиковать настройки здесь для других:
try:
a = Application("abcdef", "")
except pySourceAidExceptions.PathIsNotAValidOne:
pass
except:
self.assertTrue(False)
Что я пытался сделать здесь, было убедиться, что если попытаться создать экземпляр объекта Application со вторым аргументом пробелов, будет создан pySourceAidExceptions.PathIsNotAValidOne.
Я считаю, что использование вышеуказанного кода (основанного на ответе DGH) будет делать это.
Если вы передадите класс Exception в assertRaises()
, будет предоставлен контекстный менеджер. Это может улучшить читаемость ваших тестов:
# raise exception if Application created with bad data
with self.assertRaises(pySourceAidExceptions.PathIsNotAValidOne):
application = Application("abcdef", "")
Это позволяет тестировать ошибки в коде.
В этом случае вы тестируете PathIsNotAValidOne
, когда вы передаете недопустимые параметры конструктору приложения.
Я нашел полезным для обезьяны-патча unittest
следующим образом:
def assertMayRaise(self, exception, expr):
if exception is None:
try:
expr()
except:
info = sys.exc_info()
self.fail('%s raised' % repr(info[0]))
else:
self.assertRaises(exception, expr)
unittest.TestCase.assertMayRaise = assertMayRaise
Это уточняет намерение при тестировании на отсутствие исключения:
self.assertMayRaise(None, does_not_raise)
Это также упрощает тестирование в цикле, который я часто делаю:
# ValueError is raised only for op(x,x), op(y,y) and op(z,z).
for i,(a,b) in enumerate(itertools.product([x,y,z], [x,y,z])):
self.assertMayRaise(None if i%4 else ValueError, lambda: op(a, b))