A little facade for the standard python mocker library to make it user-friendly
Project description
unittest-mocker
Inspired by the pytest-mock, but written from scratch for using with unittest and convenient tool - Class mocker
Installation
pip install unittest-mocker
Usage
General mocker
@activate_mocker
def test_create_client(self, mocker: Mocker):
post_mock = mocker.patch('requests.post')
post_mock.return_value.status_code = 200
post_mock.return_value.json.return_value = {'msg': done}
send_clients_to_crm()
post_mock.assert_called_once_with(...)
or you can put the mocking logic in a separate method:
def mock_post(mocker, status):
response = requests.Response()
response.status_code = status
response.headers = {'Location': '...'}
response._content = 'some content'
return mocker.patch('requests.post', return_value=response)
@activate_mocker
def test_upload_post_success(mocker):
mocked_post = mock_post(mocker, 201)
...
@activate_mocker
def test_upload_post_error(mocker):
mocked_post = mock_post(mocker, 500)
...
Details
mocker.patch
under the hood calls unittest.mock.patch
So you can apply any arguments of the standard mock library
The same with mocker.patch.object
. It has the same parameters asunittest.mock.patch.object
Class mocker
Basic usage:
from unittest_mocker import activate_mocker, Mocker
from api import ApiClient
@activate_mocker
def test_api_client(self, mocker: Mocker):
client_mock = mocker.patch_class('api.ApiClient')
ApiClient(url='example.com')(command='start')
client_mock.test_initialized_with(url='example.com')
client_mock.mocks['__call__'].assert_called_once_with(command='start')
Syntax
# Variant 1
mocker.patch_class(target: str, methods=Optional[list[str]])
# Example:
mock = mocker.patch_class('some_module.SomeClass', methods=['method_1', 'method_2'])
# Variant 2
mocker.patch_class.object(target: Union[module, class], attribute: str, methods=Optional[list[str]])
# Example:
import some_module
mock = mocker.patch_class(some_module, 'SomeClass', methods=['method_1', 'method_2'])
All mocked methods are stored in mock.mocks
dictionary and can be accessed:
mock['__init__'].assert_called_once_with(...)
patch_class
always patches class's __init__
method.
Also, methods
parameter also defaults to [__call__
]. So that's correct:
mock = mocker.patch_class('some_module.SomeClass')
...
mock.mocks['__call__'].assert_called_once_with(...)
Helper test_initialized_with
mock.test_initialized_with() is just shortcut for mock['__init__'].assert_called_once_with()
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 unittest_mocker-0.9.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 761e89fe36897fb6e5252776e4a8dfa853db15aec6ff684e8762a5ef8de4e501 |
|
MD5 | 4f7e7463c9e2930b3cabdd4b4ec52f8f |
|
BLAKE2b-256 | 32757711411dd37e99ef59b36df78aecad3e4bccfc5b537036e7c32f965c5242 |