[TIP] Mock plumbum commands

Oliver Bestwalter oliver at bestwalter.de
Wed Mar 8 04:22:33 PST 2017


Hi Paulo,

On Wed, 8 Mar 2017 at 11:09 Paulo Matos <pmatos at linki.tools> wrote:

I would probably like that during testing, ls will return always the
same thing and for that I need to mock it. But what would be the correct
approach?


if you want local to return a simple function instead of the real commadn
you can directly monkeypatch the __getitem__ method of LocalMachine() local
is a module level instance of that class.

e.g.

from plumbum.machines import LocalMachine


def get_item_mock(*_, **__):
    def i_am_the_mocked_function():
        print("I am mocked")
        return "mock value"

    return i_am_the_mocked_function

LocalMachine.__getitem__ = get_item_mock


def test_something_with_mocked_local():
    from plumbum import local

    assert local["dontcare"]() == "mock value"



if the formatting is mangled - I copied it into a gist:
https://gist.github.com/obestwalter/2bae7adb5325984f801fc334ff1b8151

if you are looking for a nice mocking framework I would recommend flexmock:
https://pypi.python.org/pypi/flexmock

There you could say something like
flexmock('module_under_test').should_receive('local').and_return(get_item_mock)

Cheers
Oliver
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20170308/e4653af1/attachment.html>


More information about the testing-in-python mailing list