Я хочу транзакции. AutoSave.save () (импортировано) из сценария автосохранения, чтобы выдать исключение OperationalError при запуске модульного теста, но оно не вызывает исключение,он просто проходит тест, даже если я не уловил это исключение OperationalError .Я что-то не так делаю с насмешкой над объектом?Я пробовал mock_request.return_value
, mock_request.side_effect
и mock_request.return_value.side_effect
, и ни один из них не работал.Для ясности код является только частичным.
Модульный тест для автосохраняемого сценария:
from django.db.utils import OperationalError
from mock import patch
class CommandsTestCase(TestCase):
class FakeResponse(object):
def __init__(self, content, should_raise=False):
self.content = content
self.should_raise = should_raise
def raise_for_status(self):
if self.should_raise:
raise OperationalError('TEST: This exception is raised to mock a Database failure.')
def test_autosave(self):
with patch('folder.apps.AutoSave.AutoSave.save') as mock_request:
mock_request.return_value = self.FakeResponse(content='', should_raise=True)
call_command('autosave')
сценарий autosave.py
from isc_utils.commands import MyCommand
from isc_utils.db import queryset_iterator
from folder.apps.folder.models import Transaction
from folder.apps.AutoSave import AutoSave
class Command(MyCommand):
def run(self, *args, **kwargs):
upload_dt = datetime.datetime.now()
qs = Transaction.objects.filter(
upload_datetime__gte=upload_dt
)
for transaction in queryset_iterator(qs):
transaction_id = transaction.id
try:
transaction.AutoSave.save()
except (ValidationError, ResourceNotFound):
self.logger.error('autosave failed RID %s', transaction.id, exc_info=True)
continue