Jticker core
Project description
pytest-automock
Automock fixtures for pytest.
automock
Autogenerated method mocks for objects. Supports both sync/async methods.
Lets say you have some module mymod.py
:
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... conftest.py
:
import pytest
import mymod
@pytest.fixture(autouse=True)
def _mocks(automock):
with automock((mymod, "T")):
yield
test_t.py
:
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 T
.
In locked mode there are no mock-files updates also.
To allow real calls and mocks generation automock
provides extra cli argument to pytest
call --automock-unlocked
$ 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
API
automocker(*pairs, storage="tests/mocks", unlocked=None)
- pairs: pair/tuple of object/module and attribute name (str)
- storage (
str
orPath
): root path for storing mocks - unlocked (
bool
): mode selector (if omited, selected by--automock-unlocked
)
Pros
- Easy to use
- Speed up tests
- Mock any object
- Mock functions
Cons
- 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
automock_unlocked
Fixture with default mode from cli parameter.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pytest_automock-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3225a5aabd282061a42933bbb342df6e2a6853f27b15ec7d2e887dd9f1134b30 |
|
MD5 | 608e30cffdb5b220b051aa4757d880cc |
|
BLAKE2b-256 | 47937062dc69678729654c95ae372e7ab29fa6a8660fd138428177d4bfae84f1 |