Pytest fixtures¶
Polyfactory support registering factories as pytest fixtures using the
register_fixture
decorator:
Using the
register_fixture_decorator
field.¶from dataclasses import dataclass
from datetime import date, datetime
from typing import List, Optional, Union
from uuid import UUID
from polyfactory.factories import DataclassFactory
from polyfactory.pytest_plugin import register_fixture
@dataclass
class Person:
id: UUID
name: str
hobbies: Optional[List[str]]
nicks: List[str]
age: Union[float, int]
birthday: Union[datetime, date]
@register_fixture
class PersonFactory(DataclassFactory[Person]): ...
def test_person_factory(person_factory: PersonFactory) -> None:
person_instance = person_factory.build()
assert isinstance(person_instance, Person)
# The factory class itself can still be used
another_person_instance = PersonFactory.build()
assert isinstance(another_person_instance, Person)
The fixture can be registered separately from the declaration of the class. This is useful when a different pytest fixture location to where the factory is defined.
Using the
register_fixture_decorator
field separately.¶from dataclasses import dataclass
from datetime import date, datetime
from typing import List, Optional, Union
from uuid import UUID
from polyfactory.factories import DataclassFactory
from polyfactory.pytest_plugin import register_fixture
@dataclass
class Person:
id: UUID
name: str
hobbies: Optional[List[str]]
nicks: List[str]
age: Union[float, int]
birthday: Union[datetime, date]
class PersonFactory(DataclassFactory[Person]): ...
register_fixture(PersonFactory)
def test_person_factory(person_factory: PersonFactory) -> None:
person_instance = person_factory.build()
assert isinstance(person_instance, Person)
You can also control the name of the fixture using the optional name
kwarg:
Aliasing a factory fixture using the name kwarg.¶
from dataclasses import dataclass
from datetime import date, datetime
from typing import List, Optional, Union
from uuid import UUID
from polyfactory.factories import DataclassFactory
from polyfactory.pytest_plugin import register_fixture
@dataclass
class Person:
id: UUID
name: str
hobbies: Optional[List[str]]
nicks: List[str]
age: Union[float, int]
birthday: Union[datetime, date]
@register_fixture(name="aliased_person_factory")
class PersonFactory(DataclassFactory[Person]): ...
def test_person_factory(aliased_person_factory: PersonFactory) -> None:
person_instance = aliased_person_factory.build()
assert isinstance(person_instance, Person)