Django как предотвратить запуск исправленного метода при его создании в суперклассе

У меня есть модель с методом post-save, который я не хочу запускать в тесте:

class MyModel(models.Model):

    def save(self, *args, **kwargs):
        super(MyModel, self).save(*args, **kwargs)
        self.post_save_method()

    def post_save_method(self):
        print("oh no!")
        return "real value"

Если я делаю обычный тест, все работает так, как я ожидал. Я могу поставить патч на метод и увидеть, что я получаю подражаемое возвращаемое значение, и что post_save_method не выполняется (ничего не выводится из этого метода в консоль):

from django.test import TestCase
from .models import MyModel
from unittest.mock import patch

class TestMakeObjectNormally(TestCase):

    @patch.object(MyModel, 'post_save_method')
    def test_something(self, post_save_mock):
        post_save_mock.return_value = "mocked value"
        my_model = MyModel.objects.create()
        print(my_model.post_save_method())

Но способ настройки тестов таков, что экземпляр создается в суперклассе. Следуя этому гисту я попытался сделать патч на уровне класса:

class BaseTest(TestCase):
    def setUp(self):
        self.my_model = MyModel.objects.create()

@patch.object(MyModel, 'post_save_method')
class TestMakeObjectInSuper(BaseTest):

    def setUp(self):
        super().setUp()

    def test_something(self, post_save_mock):
        post_save_mock.return_value = "mocked value"
        print(self.my_model.post_save_method())

Это работает в том смысле, что возвращаемое значение post_save_method является насмешкой, но, к сожалению, я вижу, что метод запущен ("oh no!" выводится в консоль).

(я также пробовал исправлять оба метода setUp() и базовый класс)

Любой совет приветствуется!

Вернуться на верх