Skip to content

fresh2dev/mockish

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

mockish

A thin layer of sugar atop Python's mock.

Links
Code Repo https://www.github.com/fresh2dev/mockish
Mirror Repo https://www.f2dv.com/r/mockish
Documentation https://www.f2dv.com/r/mockish
Changelog https://www.f2dv.com/r/mockish/changelog
License https://www.f2dv.com/r/mockish/license
Funding https://www.f2dv.com/fund

GitHub release (latest SemVer) GitHub Release Date License GitHub Repo stars GitHub issues GitHub pull requests PyPI - Downloads Docker Pulls Changelog Funding


Overview

mockish is a small tool I built to make life easier when writing tests in Python.

It provides:

  1. Explicit alternatives to the nuanced mock.Mock(side_effect=...) argument, including:

    • mockish.Mock(return_value=...)
    • mockish.Mock(return_call=...)
    • mockish.Mock(return_once=...)
    • mockish.Mock(return_each=...)
    • mockish.Mock(return_exception=...)
  2. Methods for creating HTTP responses -- both requests.Response and httpx.Response objects -- that can be returned by the Mock, including:

    • mockish.httpx.Response.from_dict(...)
    • mockish.requests.Response.from_dict(...)

Install

From PyPi{:target="_blank"}:

pip install mockish

Use

Complete example of mocking a HTTP response:

from mockish import Mock, patch
from mockish.requests import Response
import requests

mock_resp = Response.from_dict({'hello': 'world'})

with patch.object(
    requests,
    'get',
    Mock(return_once=mock_resp)
):
    resp: requests.Response = requests.get('https://www.f2dv.com')

    requests.get.assert_called_once()

print(resp)
> <Response [200]>

print(resp.json())
> {'hello': 'world'}

See the reference docs for more examples:

Support

If this project delivers value to you, please provide feedback, code contributions, and/or funding.