通用模型工厂框架
pyfactor的Python项目详细描述
pyfactory是一个用于编写通用模型工厂的库 用于单元测试。
示例
基本示例
下面的例子展示了一个非常简单的例子。在我们的某个地方说 测试我们需要User对象的各种实例。在我们的测试中 只需编写以下命令即可创建用户:
user = UserFactory().create("basic")
下面显示了实现此操作所需的pyfactory代码。注意 创建的ModelBuilder只需执行一次。
from pyfactory import Factory, schema import models class ModelBuilder(object): """ The model builder is responsible for knowing how to build and create models based on their attributes. This is what allows PyFactory to be completely model-agnostic. """ @classmethod def build(cls, model_cls, attrs): return model_cls(attributes) @classmethod def create(cls, model_cls, attrs): result = cls.build(model_cls, attrs) result.save() return result class UserFactory(Factory): """ This shows a simple factory which creates a type of User. """ _model = models.user.User _model_builder = ModelBuilder @schema() def basic(self): return { "first_name": "Test", "last_name": "User", }
关联
在任何应用程序中,模型通常都有关联。让我们看看 我们有一个Post模型,它是由User编写的。 如果我们希望在测试中有一个有效的Post对象,那么我们只需要 执行以下操作:
post = PostFactory().create("basic")
而pyfactory工厂也同样简单:
class PostFactory(Factory): @schema() def basic(self): return { "title": "Fake Title", "body": "Lorem ipsum...", "author_id": association(UserFactory(), "basic", "id") }
属性覆盖
在上面的例子中,如果您已经有了一个 想成为一名博士后吗?好吧,通过 只是将override属性作为附加的关键字参数传递 工厂方法:
author = # Pretend we got an author somewhere post = PostFactory().create("basic", author_id=author.id)