У меня есть сервисный уровень в моем приложении Django, где у меня есть бизнес-логика и соответствующий код поиска данных. Теперь, когда я пишу модульные тесты, я хочу, чтобы выкрикивал вызовы ORM, так что я тестирую только уровень сервиса.Исправление нескольких вызовов ORM в Django
Моего уровень услуг выглядит следующим образом:
from .models import Event
class EventService():
def get_client_separated_events(self):
# Some complex business logic goes here
qs = Event.objects.all()
# Some complex business logic here as well
return foo
Когда я тестирую EventService
класса, я хочу вызовы, такие как Events.objects.all()
быть издевались из полностью. В настоящее время, я использую patch
для достижения этой цели:
class TestEventService(TestCase):
@classmethod
def setUpTestData(cls):
cls.event_service = EventService()
cls.dummy_events = [Event(id=1, name='n1', description='d1'), Event(id=2, name='n2', description='d2')]
@patch('foo.bar.Events.objects.all')
def test_get_all(self, get_events):
get_events.return_value = self.dummy_events
expected_events = self.event_service.get_all()
self.assertListEqual(expected_Events, self.dummy_events, msg="Assertion failed for get_all method "
"in Event Service")
Тем не менее, может быть десять таких различных вызовов ORM, и я не хочу, чтобы написать десять строк на сумму @patch
заявлений издеваться их. Я читал онлайн, что @patch.multiple
может это сделать, но я не совсем знаю, правильно ли это сделать. Может кто-нибудь помочь?