Automock fixtures for pytest.
Autogenerated method mocks for objects. Supports both sync/async methods.
Lets say you have some module
import time class T: def do_job(self, x, y): s = x + y time.sleep(s) return s
And you want to create mocks for your tests, but you are too lazy to write them...
import pytest import mymod @pytest.fixture(autouse=True) def _mocks(automock): with automock((mymod, "T")): yield
import mymod def test_job(): t = mymod.T() assert t.do_job(1, 2) == 3 assert t.do_job(2, 3) == 5
If you run
pytest on this setup, then you will see fail:
$ pytest -x ... E RuntimeError: Mock is locked, but '__init__' wanted
automock can work in two modes: locked and unlocked. Locked mode is default, real methods calls of mocked objects are
not allowed in this mode. So, above error says that we can't call
__init__ of our
In locked mode there are no mock-files updates also.
To allow real calls and mocks generation
automock provides extra cli argument to
$ pytest -x --automock-unlocked ... test_t.py . ... 1 passed in 8.08s
After that you can see that
tests/mocks/test_job/T file was created. This is mock for your test sequence.
Now you can rerun tests and see what happens (you can omit
--automock-unlocked key for ensurance, that real object
will not be touched).
$ pytest -x ... test_t.py . 1 passed in 0.06s
automocker(*pairs, storage="tests/mocks", unlocked=None)
- pairs: pair/tuple of object/module and attribute name (str)
- storage (
Path): root path for storing mocks
- unlocked (
bool): mode selector (if omited, selected by
- Easy to use
- Speed up tests
- Mock any object
- Mock functions
- No support for dunder methods (can be partly solved)
- No support for sync/async generators/contexts
- No black and white lists of methods for mocking (can be solved)
- Races will break tests, since order counts
Fixture with default mode from cli parameter.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for pytest_automock-0.1.1-py3-none-any.whl