Skip to main content

pybond is a spying and stubbing library inspired by the clojure bond library.

Project description

pybond

Build codecov

pybond is a spying and stubbing library inspired heavily by the clojure bond library.

Installation

pip

pip install pybond==0.2.2

requirements.txt

pybond==0.2.2

pyproject.toml

pybond = "0.2.2"

Example usage

Let's say you wanted to test the functions in this module:

# /sample_code/my_module.py
from typing import Any

import sample_code.other_package as other_package


def foo(x: Any) -> None:
    response = other_package.make_a_network_request(x)
    other_package.write_to_disk(response)
    return response


def bar(x: Any) -> None:
    return foo(x)

With pybond you can easily spy on any given function or stub out functions that perform IO:

# /tests/test_my_module.py
from pybond import calls, called_with_args, spy, stub, times_called

import sample_code.other_package as other_package
import sample_code.my_module as my_module
from sample_code.my_module import bar


def test_foo_is_called():
    with spy(my_module.foo):
        assert times_called(my_module.foo, 0)
        bar(42)
        assert times_called(my_module.foo, 1)
        bar(42)
        bar(42)
        assert times_called(my_module.foo, 3)


def test_bar_handles_response():
    with stub(
        (other_package.make_a_network_request, lambda x: {"result": x * 2}),
        (other_package.write_to_disk, lambda _: None),
    ), spy(
        my_module.foo,
    ):
        assert times_called(my_module.foo, 0)
        assert times_called(other_package.make_a_network_request, 0)
        assert bar(21) == {"result": 42}
        assert times_called(my_module.foo, 1)
        assert times_called(other_package.make_a_network_request, 1)
        assert called_with_args(my_module.foo, args=[21])
        assert bar(20) == {"result": 40}
        assert calls(my_module.foo) == [
            {
                "args": [21],
                "kwargs": None,
                "return": {"result": 42},
                "error": None,
            },
            {
                "args": [20],
                "kwargs": None,
                "return": {"result": 40},
                "error": None,
            },
        ]
        assert calls(other_package.write_to_disk) == [
            {
                "args": [{"result": 42}],
                "kwargs": None,
                "return": None,
                "error": None,
            },
            {
                "args": [{"result": 40}],
                "kwargs": None,
                "return": None,
                "error": None,
            },
        ]

License

Distributed under the Eclipse Public License.

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

pybond-0.2.2.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

pybond-0.2.2-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file pybond-0.2.2.tar.gz.

File metadata

  • Download URL: pybond-0.2.2.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.8 Darwin/23.3.0

File hashes

Hashes for pybond-0.2.2.tar.gz
Algorithm Hash digest
SHA256 bc9275dcdb0ccba2bb48995df39fd702cd7d057ba77ab7f411d6ca35ee256bde
MD5 c5316831ac9faa6144aee7c6fbdf1c83
BLAKE2b-256 189f17dc6bd9450c161c9b9051eac4cb0f1b037d50100dd33e249b832108cc92

See more details on using hashes here.

File details

Details for the file pybond-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: pybond-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.8 Darwin/23.3.0

File hashes

Hashes for pybond-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a2f75464596cff9b8ed7bb67f56624e9196039fe6d0bee39ce6b1b0d87b26cac
MD5 d654583c3a30155a5ef3862772b9217f
BLAKE2b-256 adbb8b98ed990917e1bb9e82f4aa326a9d0d54477bebbbf39f486c73519fa726

See more details on using hashes here.

Supported by

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