Django pytest:如何停止类似的modelmanager方法测试 我所拥有的 经理与模型
有了经理,我可以得到满足、指导或规定的案例Django pytest:如何停止类似的modelmanager方法测试 我所拥有的 经理与模型,django,pytest,pytest-django,Django,Pytest,Pytest Django,有了经理,我可以得到满足、指导或规定的案例 from datetime导入日期 班级案例经理(models.Manager): “”“为案例模型定义管理器。”“” 已完成的定义(自我): “获取即将完成的所有案例。” 返回self.get_queryset().filter(fulfillment=date.today()) def caducated(自): “”“获取所有将很快生效的案例。”“” 返回self.get_queryset().filter(caducity=date.today
from datetime导入日期
班级案例经理(models.Manager):
“”“为案例模型定义管理器。”“”
已完成的定义(自我):
“获取即将完成的所有案例。”
返回self.get_queryset().filter(fulfillment=date.today())
def caducated(自):
“”“获取所有将很快生效的案例。”“”
返回self.get_queryset().filter(caducity=date.today())
def规定(自我):
“获取所有即将开出处方的病例。”
返回self.get_queryset().filter(处方=date.today())
课堂案例(models.Model):
“”“代表法律案件。”“”
fulfillment=models.DateField(详细名称=(fulfillment),默认值为date.today)
caducity=models.DateField(详细名称=(caducity),默认值为date.today)
处方=models.DateField(详细名称=uu(“处方”),默认值=date.today)
objects=CaseManager()
工厂
为测试创建假案例
class CaseFactory(DjangoModelFactory):
“”“定义案例工厂”“”
履行=伪造(“日期”)
衰老=伪造(“日期”)
处方=伪造者(“日期”)
类元:
模型=案例
我试过的
测验
问题
使用这种方法,我必须对我的经理的所有方法重复几乎相同的测试,这些方法相似,不可扩展
我想要什么
案例
并更改传递给工厂的关键字args以创建假模型assert
中调用管理器的不同方法,而不重复相同的代码您可以使用对象列表概括这些对象:
class TestCasesManagers:
kws = [
('fulfillment', 'fulfilled'),
('caducity', 'caducated'),
('prescription', 'prescribed')
]
def make_test(ky, mg):
def f(self):
case = CaseFactory(**{ky: date.today()})
assert case in getattr(Case.objects, mg)()
return f
for ky, mg in kws:
locals()[f'test_{mg}'] = make_test(ky, mg)
del make_test
类TestCaseSManager:
kws=[
(“完成”、“完成”),
(‘衰老’、‘衰老’),
(‘处方’、‘处方’)
]
def make_测试(ky,mg):
def f(自我):
case=CaseFactory(**{ky:date.today()})
在getattr中断言大小写(case.objects,mg)()
返回f
对于ky,单位为kws的镁:
局部变量()[f'test_{mg}']=make_测试(ky,mg)
del make_测试
因此,您可以很容易地在列表
kws
中添加一个额外的2元组来测试这种组合。这些仍然是单独的测试,因此您可以决定只运行一个管理器功能,或者只重试失败的功能。为什么使用此行del make_test
?它的目的是什么?
class TestCasesManagers:
kws = [
('fulfillment', 'fulfilled'),
('caducity', 'caducated'),
('prescription', 'prescribed')
]
def make_test(ky, mg):
def f(self):
case = CaseFactory(**{ky: date.today()})
assert case in getattr(Case.objects, mg)()
return f
for ky, mg in kws:
locals()[f'test_{mg}'] = make_test(ky, mg)
del make_test