python - 使用 Factory Boy SelfAttribute +relativedelta

标签 python django unit-testing factory-boy

我在测试中使用 Factory Boy,并希望实现以下目标:

  • 使 first_period_end_date 依赖于 first_period_date 并为其添加 12 个月。

我正在尝试将 SelfAttributerelativedelta 结合使用,但我当前应用它的方式不起作用。我的代码:

import datetime

import factory
from dateutil import relativedelta

from somewhere.models import Contract

class ContractFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Contract

    start_date = factory.LazyFunction(datetime.date.today)
    first_period_date = factory.SelfAttribute('start_date')
    first_period_end_date = (
        factory.SelfAttribute('first_period_date')
        + relativedelta.relativedelta(months=12)
    )

但在运行时我收到以下错误:

TypeError: unsupported operand type(s) for +: 'SelfAttribute' and 'relativedelta'

所以这显然不是它的做法。但我该怎么做呢?

最佳答案

答案是LazyAttributeSelfAttribute 仅对复制字段有帮助。

你应该这样做:

class ContractFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Contract

    start_date = factory.LazyFunction(datetime.date.today)
    first_period_date = factory.SelfAttribute('start_date')
    first_period_end_date = factory.LazyAttribute(
        lambda self: self.first_period_date + relativedelta.relativedelta(months=12)
    )

关于python - 使用 Factory Boy SelfAttribute +relativedelta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59766462/

相关文章:

python - 取消任务会取消任务正在等待的 future 。它是如何工作的?

django - MigrationSchemaMissing(无法创建 django_migrations 表(%s)% exc)

python - 在 GCP Cloud-Build 上构建 Django 项目

python - 模块未找到错误: No module named 'social.models' when running celery worker

unit-testing - 模拟对象的目的是什么?

visual-studio-2010 - 如何在 Visual Studio 2010 中精确计时测试运行

javascript - 作为参数传递的 Sinon 匿名 stub

python - 将时间字符串转换为十进制小时数?

python - 关于 tf.nn.leaky_relu 中 alpha 的详细信息(features, alpha=0.2, name=None)

python - 使用 python 将大向量存储到数据库的最佳方法是什么?