Unit Test Проблема с assertRaises
Я пытаюсь проверить исключение.
У меня есть:
def test_set_catch_status_exception(self):
mro = self.mro
NEW_STATUS = 'No such status'
self.assertRaises(ValueError,mro.setStatus(NEW_STATUS))
Я получаю следующую ошибку:
======================================================================
ERROR: test_set_catch_status_exception (__main__.TestManagementReviewGoalGetters)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_ManagementReviewObjective.py", line 68, in test_set_catch_status_exception
self.assertRaises(ValueError,mro.setStatus(NEW_STATUS))
File "/Users/eric/Dropbox/ManagementReview.py", line 277, in setStatus
raise ValueError('%s is not in the list of allowed statuses: %s' % (status,LIST_OF_STATUSES))
ValueError: No such status is not in the list of allowed statuses: ['Concern or Delay', 'On Track', 'Off Track/Needs Attention']
----------------------------------------------------------------------
Спасибо
Ответы
Ответ 1
self.assertRaises
ожидает функцию mro.setStatus
, за которой следует произвольное количество аргументов: в этом случае просто NEW_STATUS
. self.assertRaises
собирает свои аргументы в вызов функции mro.setStatus(NEW_STATUS)
внутри блока try...except
, таким образом, захватывая и записывая ValueError
, если это происходит.
Передача mro.setStatus(NEW_STATUS)
в качестве аргумента self.assertRaises
приводит к тому, что ValueError
произойдет до того, как self.assertRaises
сможет заблокировать его.
Итак, исправление заключается в том, чтобы изменить круглые скобки на запятую:
self.assertRaises(ValueError,mro.setStatus,NEW_STATUS)