Oven logo

Oven

flexmock0.12.1

Published

flexmock is a testing library for Python that makes it easy to create mocks, stubs and fakes.

pip install flexmock

Package Downloads

Weekly DownloadsMonthly Downloads

Authors

Requires Python

<4.0.0,>=3.8.0

Dependencies

    banner

    flexmock - Mock, stub, and spy library for Python.

    pypi ci documentation codecov license


    Flexmock is a testing library for Python that makes it easy to create mocks, stubs, and fakes.

    Features

    • Mock: Easily create mock objects and make assertions about which methods or attributes were used and arguments they were called with.
    • Spy: Proxy calls to object's original methods or attributes and make assertions based on return values or call count.
    • Fake: Generate a fake objects to be used in your tests with ease.
    • Stub: Create stub objects which replace parts of existing objects and classes with just one call.
    • No external dependencies: Flexmock is lightweight and only uses Python standard library. There are no external dependencies.
    • Simple and intuitive: Declarations are structured to read more like English sentences than API calls, so they are easy to learn and use.
    • Fully type annotated: External API is fully type annotated so it works great with static analysis tools and editor auto-completion.
    • Integrations with test runners: Integrates seamlessly with all major test runners like unittest, doctest, and pytest.
    • Python 3.6+ and PyPy3: Extensively tested to work with latest Python versions.

    Installation

    Install with pip:

    pip install flexmock
    

    Examples

    Flexmock features smooth integration with pretty much every popular test runner, so no special setup is necessary. Simply importing flexmock into your test module is sufficient to get started with any of the following examples:

    from flexmock import flexmock
    

    Mocks

    Assertions take many flavors and flexmock has many different facilities to generate them:

    # Simplest is ensuring that a certain method is called
    flexmock(Train).should_receive("get_tickets").once()
    
    # Of course, it is also possible to provide a default return value
    flexmock(Train).should_receive("get_destination").and_return("Paris").once()
    
    # Or check that a method is called with specific arguments
    flexmock(Train).should_receive("set_destination").with_args("Seoul").at_least().twice()
    

    Spies

    Instead of mocking, there are also times when you want to execute the actual method and simply find out how many times it was called. Flexmock uses should_call to generate this sort of assertions instead of should_receive:

    # Verify that a method is called at most three times
    flexmock(Train).should_call("get_tickets").at_most().times(3)
    
    # Make sure that a method is never called with specific arguments
    flexmock(Train).should_call("set_destination").with_args("Helsinki").never()
    
    # More complex example with features like argument type and exception matching
    flexmock(Train).should_call("crash").with_args(str, int).and_raise(AttributeError).once()
    

    See more examples in the documentation.

    Documentation

    User guide, examples, and a full API reference is available at: https://flexmock.readthedocs.io

    Contributing

    Contributions are absolutely welcome and encouraged! See CONTRIBUTING.md to get started.