Как передать `msg` в методы unittest.mock assert?

Документы TestCase указывают, что методы assert могут принимать msg Аргумент ключевого слова для указания сообщения для добавления контекста в утверждение:

Все методы assert принимают аргумент msg, который, если указан, используется в качестве сообщения об ошибке при сбое (см. Также longMessage).

Есть ли способ сделать это с помощью метода unittest.mock assert, в частности, assert_any_call?

2 ответа

Решение

Глядя на источник assert_any_callсообщение жестко закодировано:

raise AssertionError(
    '%s call not found' % expected_string
) from cause

Кроме того, AssertionError возникает непосредственно в коде, а не является следствием неудачного assert заявление. Этот шаблон сопровождается всеми assert_* методы в модуле. Таким образом, нет никакого способа установить пользовательское сообщение, если вы не создадите подкласс и не переопределите методы, которые вас интересуют.

Я знаю, что этот вопрос старый, но я думаю, что он все еще актуален:

Вы всегда можете просто поймать и сделать ререйз:

      try:
    my_mock.assert_any_call()
except AssertionError as e:
    raise AssertionError("My custom message") from e
Другие вопросы по тегам