通用模型工厂框架

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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
面向批处理的java非阻塞队列   java如何基于HttpComponent获取html内容   java为什么我的程序会显示此错误?   java spring控制器如何处理应用程序/octetstream请求?   尝试将数据插入数据库时出现java常规错误   无法在java多线程处理中维护生产者任务的顺序   java为什么JSON数据无法访问ViewPager?   java获取Maven中特定分支的SVN buildnumber   java客户端无法从服务器接收信息   java等轴测地图绘制,生成   java无法调试ProcessBuilder   java热点JVM阵列分配   在数组中存储“inputdialog”数据的java   saml Java Inflater引发DataFormatException“无效代码长度集”   从集合(爬虫、Jsoup、Java)写入文件