【问题标题】:How to specify list size using FactoryBoy如何使用 FactoryBoy 指定列表大小
【发布时间】:2015-07-31 08:47:20
【问题描述】:

假设我有这个模型:

class FooContainerModel(object):
    def __init__(self, foos):
        self.foos = foos

我希望能够决定在创建时将创建多少个 foo,例如。

model = FooContainerFactory(count=15)

尝试过类似的工厂

class FooContainerFactory(factory.Factory):
    class Meta:
        model = FooContainerModel

    foos = factory.List([Foo() for _ in xrange(20)]) # fixed amount
    foos = factory.lazy_attribute(lambda o: [Foo() for _ in xrange(20)]) # same

当然,我可以手动创建具有所需长度的 Foo() 列表并实例化 FooContainerModel,但这不是我想要的。有什么解决办法吗?

【问题讨论】:

  • 你不能在ContainerFactory 上覆盖__init__() 吗?

标签: python python-2.7 testing mocking factory-boy


【解决方案1】:

我不知道 FactoryBoy 是如何工作的,但是当我需要 Django 模型中的字段的动态属性时,这种策略通常对我有用:

def FooContainerFactory(factory.Factory):

    def __init__(self, count=20, *args, **kwargs):
        self.foos = factory.List([Foo() for _ in range(20)])
        super(FooContainerFactory, self).__init__(*args, **kwargs)

    class Meta:
        model = FooContainerModel

【讨论】:

  • 我想知道 FactoryBoy 中是否有任何现成的解决方案,但是您的方法太简单直接了,无法尝试使其复杂化,谢谢。
【解决方案2】:

您可以使用create_batch 方法来做到这一点。

models = FooContainerFactory.create_batch(size=15)

如果您想创建 15 个完全不同的模型,您可能需要使用 SequencesFaker(另外)

【讨论】:

  • 我知道create_batch。我想要另一件事——假设我有一个包含书籍列表的 Author 类。我想知道是否可以轻松地为 Author 创建工厂配置,这样我就可以像 AuthorFactory(books__count=10) 一样调用它,它会使用 BooksFactory 在后台创建 10 本书。
  • 分为2个步骤:1)author = AuthorFactory() 2)books = BookFactory.create_batch(size=10, author=author)
  • 当然,我知道 ;) 只是想知道是否有任何现成的方法可以在一行中执行此操作
猜你喜欢
  • 2022-09-29
  • 1970-01-01
  • 2019-07-08
  • 2011-03-28
  • 2017-02-25
  • 1970-01-01
  • 2015-09-30
  • 2020-04-05
  • 2012-02-04
相关资源
最近更新 更多