Skip to main content

Utility which makes mocking more readable and controllable

Project description

pytest-when

Pytest plugin for making mocking in python more readable. 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:

  1. pdm https://pdm.fming.dev/latest/#installation
  2. python3.8 (minimum supported by a tool)
pdm install

To run tests and linters use:

make test
make lint

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_when-1.0.3.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_when-1.0.3-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file pytest_when-1.0.3.tar.gz.

File metadata

  • Download URL: pytest_when-1.0.3.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.6.1 CPython/3.10.6

File hashes

Hashes for pytest_when-1.0.3.tar.gz
Algorithm Hash digest
SHA256 564654e123de88195b339cfd53139d41ba8f79333eb34803d2aa178ef585a542
MD5 2aafeebfd329ebd2ca5d7506b119cbc4
BLAKE2b-256 a808086a974483e4b4c1d8c2564c83c87cdd3732bfa2ce274f4687c406fb08b8

See more details on using hashes here.

File details

Details for the file pytest_when-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: pytest_when-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.6.1 CPython/3.10.6

File hashes

Hashes for pytest_when-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0829ff0baf0e8354f1aaf89b5b30fb579ead5d8affdbb8ea6905a9ea0358f4a8
MD5 6ec5baedf3121e702de47dfba6a3b4b1
BLAKE2b-256 7a9db2206f3a24a3240cfaa507971bcf8b3972cf7456ee137118d70e77640fe0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page