Django 测试 - 使用 create_batch 的用户工厂

2023-12-11

好吧,我的测试文件遇到了有趣的问题。

我正在使用这个简单的代码来检查用户创建的UserFactory

UserFactory.create_batch(4)

for u in User.objects.all():
    print(u.email)

UserFactory - 这工作正常

创建 4 个用户create_batch(4) process

from django.contrib.auth import get_user_model
from factory import Faker
from factory.django import DjangoModelFactory

class UserFactory(DjangoModelFactory):
    email = Faker("email")
    password = Faker(
        "password",
        length=42,
        special_chars=True,
        digits=True,
        upper_case=True,
        lower_case=True,
    )

    class Meta:
        model = get_user_model()
        django_get_or_create = ["email"]

UserFactory - 这个不起作用

仅创建 1 个用户create_batch(4) process

from django.contrib.auth import get_user_model
from faker import Faker
from factory.django import DjangoModelFactory

fake = Faker()

class UserFactory(DjangoModelFactory):

email = fake.email()
password = fake.password()

class Meta:
    model = get_user_model()
    django_get_or_create = ["email"]

唯一的区别是我生成用户电子邮件的方式。factory.Faker("email)工作正常但是faker.email()没有。

也许有人有同样的问题?


  • 工厂男孩文档:https://factoryboy.readthedocs.io/en/stable/index.html
  • faker 包文档:https://faker.readthedocs.io/en/master/index.html

你的问题来自Python的工作方式。

当你写下以下内容时:

class Foo(Bar):
  email = fake.email()
  name = fake.name()

发生的情况或多或少是:

  1. Python 调用fake.email(),并接收一个值(假设[email protected])

  2. Python 调用fake.name(),并接收一个值(例如"Johannes")

  3. Python 为目标类构建所有类级声明的字典 - 这里{"email": "[email protected]", "name": "Johannes"}

  4. 这被传递到type创建类:

    Foo = type(
      "Foo",  # Name of the class being created
      [Bar],  # List of its bases
      {"email": "[email protected]", "name": "Johannes"},  # Methods & attributes
    )
    
  5. 该类现已定义,并且可用于其余代码。

换句话说,这些行的执行方式与以下代码相同:

fake = faker.Faker()
fake_email = fake.email()
fake_name = fake.name()

class UserFactory(DjangoModelFactory):
  email = fake_email
  name = fake_name
  ...

如您所见,UserFactory收到results从对 faker 的调用中,它无法知道这些值是如何生成的。

这就是各种声明的原因(factory.LazyAttribute, factory.Faker等):在这里,我们使用自定义方法传递特定于工厂的对象,每当需要构建新实例时,FactoryBoy 的构建器代码都会调用该方法:

fake_email_maker = factory.Faker("email")
fake_name_maker = factory.Faker("name")

class UserFactory(DjangoModelFactory):
  email = fake_email_maker
  name = fake_name_maker
  ...

你打电话时UserFactory(),发生的情况如下所示:

# UserFactory()
>>> fields = {}
>>> fields["name"] = UserFactory._meta.declarations...name.evaluate(...)
>>> fields["email"] = UserFactory._meta.declarations...evaluate(...)
>>> return User.objects.create(**fields)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 测试 - 使用 create_batch 的用户工厂 的相关文章

随机推荐

  • 如何从 Windows Phone 7 或 8 获取用户自己的手机号码

    我想提取 用户own手机号码 不是他的整个电话簿 我使用c 作为开发语言 谢谢 如果您想获取设备自己的电话号码 目前还不可能
  • Spring Cloud Dataflow 有什么好处?

    根据我所看到的 在 Spring Cloud Dataflow SCDF 中创建流将部署底层应用程序 绑定通信服务 如 RabbitMQ 设置 Spring Cloud Stream 环境变量并启动应用程序 这一切都可以使用 cf Push
  • 在 msvc 2010 中构建 boost MPI 时出错

    我已将 openmpi 安装在 C Program Files OpenMPI v1 5 4 win32 中 并希望编译 boost 以生成图形并行库 但出现以下错误 The system cannot find the path spec
  • 如何在 React JSX 中调用 Web API?

    我正在使用 React 和 Electron 编写一个音乐播放器 并希望添加音频元数据 以便获得 MPRIS 支持 所以我做了一些搜索并发现媒体会话API是我所需要的 为了测试它 我将上述链接包含的示例代码中的代码复制到我的项目中的函数中
  • JPA Query.getResultList() - 以通用方式使用

    我正在创建一个包含多个表的复杂查询 并且需要列出结果 通常 我使用EntityManager并将结果映射到 JPA Representation UserEntity user em find UserEntity class 5 然后我可
  • 设置和禁用 JToggleButton 的图标

    你好 我正在尝试制作一个使用 JToggleButton 的匹配记忆游戏 最重要的是 当我按下按钮时 它必须显示一张图片 并且我必须找到另一张相同的图片 所以问题是当我创建一个没有任何图标的按钮时我不能使用其他方法 setRollOverI
  • 过滤 elmah 中的异常文本

    有没有办法使用异常消息过滤 elma 中的异常 例子 System Web HttpException 请求超时 我不想过滤掉所有的 HttpException 而只想过滤掉超时的请求 System Web HttpException 超出
  • 如何读取带有空格的 cin 直到换行符?

    我希望从 C 中的 cin 读取当前位置直到换行符到字符串中 要读取的字符可能包含空格 我的第一遍失败 因为它停在第一个空格上 string result cin gt gt result 如果给出 cin cd my dir doSome
  • R:当情况并非如此时,LIME 在不同的特征编号上返回错误

    我正在构建克林顿和特朗普推文的文本分类器 数据可以在Kaggle 我正在使用 EDA 和建模quanteda包裹 library dplyr library stringr library quanteda library lime dat
  • 如何以编程方式获取 python.exe 位置? [复制]

    这个问题在这里已经有答案了 基本上我想获得 python 解释器的句柄 这样我就可以传递一个脚本文件来执行 从外部应用程序 这适用于 Linux 和 Windows Python 3 x gt gt gt import sys gt gt
  • 替换数组中的对象

    我有这个 JavaScript 对象 var arr1 id 124 name qqq id 589 name www id 45 name eee id 567 name rrr var arr2 id 124 name ttt id 4
  • React,从 json 加载本地图像

    是的 这个问题可能与其他问题重复 但我找不到这个问题的解决方案 我创造一些简单的东西 1 个读取 json 并加载图像的组件 The json images id 1 url assets images slider croissant o
  • 创建 SVG 进度圈

    有人知道如何在 svg 中创建一个圆形 进度条 吗 我需要指定圆圈的百分比 例如颜色在蛋糕形状中增长的百分比 只要我有一个属性可以改变其当前状态 增长就可以是静态的 以下是我曾经使用的想法 稍加修改css and animation标签我们
  • 如何在 Brightway 中保存新的 LCIA 方法

    我有以下格式的特征因素列表 biosphere3 key characterization factor 这是一个快速摘录 my cfs biosphere3 e259263c d1f1 449f bb9b 73c6d0a32a00 1 0
  • UserControl 与 Windows 之间的交互

    我创建了一个包含一些控件 按钮和复选框 的用户控件 之后 我在 WPF Windows 中添加了对该 UserControl 的引用 我想要做的是 当我单击 UserControl 中的按钮时 该按钮会触发一个操作并更改 Windows 中
  • 检查 Selenium 是否完成基于 Web 元素的滚动的条件?

    目前我有一个脚本将转到到到网并尝试抓取该特定过滤器中的每个图像 我想知道我应该将 if 语句设置为什么条件 以便它能够跳出 while 循环 然后解析 url 列表 为我提供每个图像的清晰 url 链接 我只是很困惑 一旦到达最后一个网络元
  • 初始化 NSMutableArray 时使用短语法是否正确?

    通常当我们要初始化的时候NSMutableArray we use NSMutableArray mArr NSMutableArray alloc initWithObjects one two three nil 但是 使用如下语法是否
  • 为什么 x,y = zip(*zip(a,b)) 在 Python 中有效?

    好的 我喜欢 Pythonzip 功能 一直用它 太棒了 我时不时地想做相反的事情zip 想 我以前知道怎么做 然后google python unzip 然后记住有人使用这个神奇的 解压缩元组的压缩列表 像这样 x 1 2 3 y 4 5
  • 如何删除 HTML 表单中提交按钮的默认焦点?

    我的页面上有一个 HTML 表单 当我在表单中的一个文本字段中输入一些值并按 Enter 键 时 表单将立即提交 我认为发生这种情况是因为默认焦点位于提交按钮上 但我尝试使用模糊 函数来删除焦点 但它不起作用 我正在使用 Chrome 有什
  • Django 测试 - 使用 create_batch 的用户工厂

    好吧 我的测试文件遇到了有趣的问题 我正在使用这个简单的代码来检查用户创建的UserFactory UserFactory create batch 4 for u in User objects all print u email Use