Почему я получаю AssertionError из-за определенного мной побочного эффекта Mock?Python

Программы на Python
Ответить
Anonymous
 Почему я получаю AssertionError из-за определенного мной побочного эффекта Mock?

Сообщение Anonymous »

Тестируемый модуль определяется следующим образом:

Код: Выделить всё

def publish_result(self, lesson_report: Dict\[str, Any\]=None):
passed = self.session_score.compute_result(lesson_report)
if passed is None or passed is False:
publish_result = self.publish_failed_msg()
else:
publish_result = self.publish_passed_msg()
Мой модульный тест определяется следующим образом:

Код: Выделить всё

@patch(main.ExternalApps.ExternalAppSession.publish_failed_msg")
@patch(main.ExternalApps.ExternalAppSession.publish_passed_msg")
def test_publish_result(mock_publish_passed_msg, mock_publish_failed_msg, create_patched_session, mock_session_score, patch_create_msg, patch_publish_msg):
session = create_patched_session
session_score = session.session_score
def return_false_side_effect(value):
return False
def return_true_side_effect(value):
return True
def return_none_side_effect(value):
return None
with patch.object(ExternalSessionScore, "compute_result", side_effect=return_true_side_effect):
test_msg = create_test_message(msgVerb.Passed)
publish_result = session.publish_result(test_msg)
mock_publish_passed_msg.assert_called_once()
with patch.object(ExternalSessionScore, "compute_result", side_effect=return_false_side_effect):
test_msg = create_test_message(msgVerb.Failed)
publish_result = session.publish_result(test_msg)
mock_publish_failed_msg.assert_called_once()
with patch.object(ExternalSessionScore, "compute_result", side_effect=return_none_side_effect):
test_msg = create_test_message(msgVerb.Failed)
publish_result = session.publish_result(test_msg)
mock_publish_failed_msg.assert_called_once()
Я запустил модульный тест, и он вернулся со следующим сбоем/ошибкой (внутри второго блока «с патчем»):

Код: Выделить всё

\\> mock_publish_failed_msg.assert_called_once()
E AssertionError: Expected 'publish_failed_msg' to have been called once. Called 0 times.
Почему это происходит, даже учитывая, что public_passed_msg был вызван один раз, как и ожидалось?


Подробнее здесь: https://stackoverflow.com/questions/798 ... ve-defined
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»