Python Django测试集在现场创建
我在Django中有以下模型(Python Django测试集在现场创建,python,django,unit-testing,Python,Django,Unit Testing,我在Django中有以下模型(models.py) 现在,我有以下功能需要测试 def get_active_session_older_than_hours(older_than_hours): older_date_time = datetime.datetime.now() - datetime.timedelta(hours=older_than_hours) data = Session.objects\ .filter(active=True, updated_at_
models.py
)
现在,我有以下功能需要测试
def get_active_session_older_than_hours(older_than_hours):
older_date_time = datetime.datetime.now() - datetime.timedelta(hours=older_than_hours)
data = Session.objects\
.filter(active=True, updated_at__lte=older_date_time)\
.values_list('code')
return data
我想测试一下
from django.test import TestCase
#Working fine
class ActiveSessionsNotPreset(TestCase):
def test(self):
data = get_active_session_older_than_hours(3)
self.assertEqual(len(data), 0)
#This is not working.
#It is not getting the result.
class ActiveSessionPresent(TestCase):
def setUp(self):
older_date_time = datetime.datetime.now() - datetime.timedelta(hours=4)
Session.objects.create(session_token='',
code='US', active=True,
created_at=older_date_time,
updated_at=older_date_time)
def test(self):
data = get_active_session_older_than_hours(3)
print("DEVENDER data " + str(data))
self.assertEqual(len(data), 1)
在第二个测试用例中,我没有得到任何结果。强制在处创建
和在
处更新的正确方法是什么?最简单的方法是使用.update(),因为它会更新不会调用任何Django方法的SQL语句
session = Session.objects.create(session_token='', ...).
session.filter(pk=session.pk).update(updated_at=older_date_time,..)
其他想法是夹具或模拟检查库,它允许您模拟测试中的日期和时间
session = Session.objects.create(session_token='', ...).
session.filter(pk=session.pk).update(updated_at=older_date_time,..)