Utility which makes mocking more readable and controllable
Project description
pytest-when
Plugin provides a when
fixture, which enables the following way of mocking
the python objects:
(
when(some_object, "attribute")
.called_with(1, 2, when.markers.any)
.then_return("mocked")
)
It is readable and gives you a way to enable the mock only for a specific argument's values. In this the attribute will be mocked, for specific first two arguments and any third argument.
Inspired by https://github.com/mockito/mockito-scala
Installation
pip install pytest-when
Usage
After installing the package a new fixture when
will be available.
See the following example how to use it:
# class which we're going to mock in the test
class Klass1:
def some_method(
self,
arg1: str,
arg2: int,
*,
kwarg1: str,
kwarg2: str,
) -> str:
return "Not mocked"
def test_should_properly_patch_calls(when):
when(Klass1, "some_method").called_with(
"a",
when.markers.any,
kwarg1="b",
kwarg2=when.markers.any,
).then_return("Mocked")
assert (
Klass1().some_method(
"a",
1,
kwarg1="b",
kwarg2="c",
)
== "Mocked"
)
assert (
Klass1().some_method(
"not mocked param",
1,
kwarg1="b",
kwarg2="c",
)
== "Not mocked"
)
# if you need to patch a function
def test_patch_a_function(when):
when(example_module, "some_normal_function").called_with(
"a",
when.markers.any,
kwarg1="b",
kwarg2=when.markers.any,
).then_return("Mocked")
assert (
example_module.some_normal_function(
"a",
1,
kwarg1="b",
kwarg2="c",
)
== "Mocked"
)
assert (
example_module.some_normal_function(
"not mocked param",
1,
kwarg1="b",
kwarg2="c",
)
== "Not mocked"
)
It is possible to use 'when' with class methods and standalone functions (in this case cls parameter will become a python module).
You can patch multiple times the same object with different "called_with" parameters in a single test.
You can also patch multiple targets (cls, method)
See more examples at: test_integration
Setup for local developement
Requirements:
- pdm https://pdm.fming.dev/latest/#installation
- python3.8 (minimum supported by a tool)
pdm install
To run tests and linters use:
make test
make lint
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_when-1.0.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24ce42bd14c35e58559bce9d090c2efa1ec556fd271c35e2d11c3219ef775a9a |
|
MD5 | 71f86fff80e184b6ccc4d05c9f49a610 |
|
BLAKE2b-256 | f7f4decd42fed91dbcb04bbce6c60d32e8a62720c6cd726a8197f2ada5403d26 |