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