将factory_boy与mongoengine一起使用时发生实例创建错误

2024-06-28 19:06:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用factory_boy测试我的mongoengine数据库操作。以下是mongoengine文档:

import mongoengine

class Address(mongoengine.EmbeddedDocument):
    street = mongoengine.StringField()

class Person(mongoengine.Document):
    name = mongoengine.StringField()
    address = mongoengine.EmbeddedDocumentField(Address)

然后我定义工厂类:


class AddressFactory(factory.mongoengine.MongoEngineFactory):
    class Meta:
        model = Address

    street = factory.Sequence(lambda n: 'street%d' % n)

class PersonFactory(factory.mongoengine.MongoEngineFactory):
    class Meta:
        model = Person

    name = factory.Sequence(lambda n: 'name%d' % n)
    address = factory.SubFactory(AddressFactory)

在我尝试在测试中使用它们之后

import unittest

class TestPerson(unittest.TestCase):
    def test_person_creation(self):
        person = PersonFactory.create()
        assert models.Plan.objects.get(address=plan.address).first()

…并获得以下异常,在我看来,如果我没有在工厂类的meta.model部分定义文档的类,但我定义了,则会出现这种异常。我猜我用错了create()方法,只是不知道该怎么做

Traceback (most recent call last):
  File "/home/anton/drill_ws/src/drill-hal/tests/test_store.py", line 76, in <module>
    person = PersonFactory.create()
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/base.py", line 564, in create
    return cls._generate(enums.CREATE_STRATEGY, kwargs)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/base.py", line 501, in _generate
    return step.build()
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 272, in build
    step.resolve(pre)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 221, in resolve
    self.attributes[field_name] = getattr(self.stub, field_name)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 375, in __getattr__
    extra=context,
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/declarations.py", line 321, in evaluate
    return self.generate(step, defaults)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/declarations.py", line 411, in generate
    return step.recurse(subfactory, params, force_sequence=force_sequence)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 233, in recurse
    return builder.build(parent_step=self, force_sequence=force_sequence)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 272, in build
    step.resolve(pre)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 221, in resolve
    self.attributes[field_name] = getattr(self.stub, field_name)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 375, in __getattr__
    extra=context,
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/declarations.py", line 321, in evaluate
    return self.generate(step, defaults)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/declarations.py", line 411, in generate
    return step.recurse(subfactory, params, force_sequence=force_sequence)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 233, in recurse
    return builder.build(parent_step=self, force_sequence=force_sequence)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/builder.py", line 279, in build
    kwargs=kwargs,
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/base.py", line 315, in instantiate
    return self.factory._create(model, *args, **kwargs)
  File "/home/anton/.local/share/virtualenvs/drill-hal-TAWOMXlQ/lib/python3.7/site-packages/factory/mongoengine.py", line 26, in _create
    instance = model_class(*args, **kwargs)
TypeError: 'NoneType' object is not callable

Tags: inpysharehomefactoryliblocalline