A better patch tool for python test.
pip install wonderpatch
import sys
from wonderpatch import wonder
with wonder(os).cpu_count.called_once(return_value=12345):
assert os.cpu_count() == 12345
Use path is ok:
import sys
from wonderpatch import wonder
with wonder('os.cpu_count').called_once(return_value=12345):
assert os.cpu_count() == 12345
from wonderpatch import wonder
class TestObject:
def name(self):
return self.__class__.__name__
with wonder(TestObject.name).called_once(return_value='x'):
assert TestObject().name() == 'x'
It is also works for property:
from wonderpatch import wonder
class TestObject:
@property
def name(self):
return self.__class__.__name__
with wonder(TestObject.name).called_once(return_value='x'):
assert TestObject().name == 'x'
If you want to use multiple patches in one place, and do not want to write a verify long statement, use wonder.together:
from wonderpatch import wonder
with wonder.together():
wonder(TestObject.name).called_once(return_value='x')
wonder(TestObject.age).called_once(return_value='x')
assert TestObject().name() == 'x'
assert TestObject().age == 'x'
Or as a decorator:
from wonderpatch import wonder
@wonder.together
def test_name():
wonder(TestObject.name).called_once(return_value='x')
assert TestObject().name() == 'x'
wonder(...).then_return(value: Any)
patch and set return value, works for called 0+ times
wonder(...).then_raise(exception)
patch and set raise value, works for called 0+ times
wonder(...).called(times=None, min=1, max=None, return_value=_empty, side_effect=_empty, only_self=False)
patch and set min or max times call, default is at least 1 time.
wonder(...).called_with(*args, **kwargs)
patch and set called at least once with args, kwargs
wonder(...).called_once_with(*args, **kwargs)
patch and set called once with args, kwargs
wonder(...).never_called()
patch and set never called.
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.