【发布时间】:2017-07-04 05:58:45
【问题描述】:
我的 Django 应用程序中有一个服务层,其中有一些业务逻辑和相应的数据检索代码。现在,当我编写单元测试时,我想模拟对 ORM 的调用,以便我只测试服务层。
我的服务层如下所示:
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 可以做到这一点——但我不太清楚这是否是正确的做法。有人可以帮忙吗?
【问题讨论】:
标签: python django unit-testing orm