工厂男孩:创建标识引用的相关对象

我正在使用Factory Boy为测试创建夹具和对象。

我在两个对象之间有一个关系,但是我是基于身份引用而不是直接的对象引用来维持这种关系。

我使用SQLAlchemy作为ORM,尽管我认为不管使用ORM技术,情况都是一样的。由于子对象与父对象具有外键关系,因此父对象必须存在,否则,如果使用创建策略,它将产生外键冲突。我有以下解决方案,但是我很感兴趣是否有人采用了更优雅的方法。

使用人为设计的员工和公司示例,其中员工只能在一个公司工作。

class Company:
    self.company_id: uuid
    self.name: str

class Employee:
    self.employee_id: uuid
    self.company_id: uuid
    self.fullname: str

其中Employee中的company_id是与公司的外键关系。员工工厂如下所示(创建公司,然后从创建的公司对象中分配company_id)。

class EmployeeFactory(factory.alchemy.SQLAlchemyModelFactory):
    class Meta:
        model = entity.Employee
        exclude = ["company"]

    company = factory.SubFactory(CompanyFactory)
    employee_id = factory.SubFactory(EmployeeIdFactory)
    company_id = factory.SelfAttribute("company.company_id")
    name = factory.Faker("sentence",nb_words=2)

我唯一不满意的部分是,如果要在使用工厂时指定/覆盖company_id,则需要使用以下调用:

EmployeeFactory.create(company__company_id=company_id)

我可以对此进行记录,但是另一位开发人员会假设他们可以使用典型的方法:

EmployeeFactory.create(company_id=company_id)

打电话。

有人知道实现这一目标的方法吗?

另一种选择是在Test本身中,首先创建Company,然后将company_id传递给EmployeeFactory。

wslw520 回答:工厂男孩:创建标识引用的相关对象

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3162994.html

大家都在问