我通过在
pybrake.Notifier
的
send_notice
方法,它在单元测试中不会被调用,而在我从django shell“手动”调用函数时会被调用。
为了获得测试覆盖率,我解决了这个问题,只是断言
logger.error
被调用:
from django.test import TestCase
from unittest.mock import patch
class SessionRecommendationTestCase(TestCase):
@patch('lucy_web.lib.session_recommendation.logger.error')
def test_create_session_from_non_existent_session_type_title_triggers_error_logging(self, mock_error):
title = "Being Awesome"
_create_sessions([title])
mock_error.assert_called_with(
f"Tried to create a session of type '{title}', but no such session type was found in the database.")
这里是我要测试的实际函数:
def _create_sessions(title_list, starting_number=1, **kwargs):
'''Auxiliary function to create sessions from a list of SessionType titles'''
session_number = starting_number
for title in title_list:
session_type = SessionType.objects.filter(title=title).first()
if session_type:
Session.objects.create(
session_type=session_type,
session_number=session_number,
**kwargs)
session_number += 1
else:
logger.error(
f"Tried to create a session of type "
f"'{title}', but no such session type was found in the database.")
此测试通过:
(venv) Kurts-MacBook-Pro-2:lucy-web kurtpeek$ python manage.py test lucy_web.tests.test_session_recommendation.SessionRecommendationTestCase.test_create_session_from_non_existent_session_type_title_triggers_error_logging
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.004s
OK
Destroying test database for alias 'default'...