Search code examples
pythonpython-3.xfunctionunit-testingoverriding

How to override a function in every instance for unit tests in Python?


I have a function, Foo, and already used in Bar and some other places in the Python package. And for the unit test, I need to replace that function with fake_Foo. The fake_Foo should override every previous instance. How to do that?

I have tried Foo = fake_Foo and global Foo but it does not work.

TL;DR: I am trying to override _command function here with fake_command function here for every previous instance.


Solution

  • I did it with:

    from _pytest.monkeypatch import MonkeyPatch
    
    def fake_Foo(monkeypatch=MonkeyPatch()):
    
        def fake__Foo(args):
            ...
    
        monkeypatch.setattr("module.Foo", fake__Foo)
    

    Just call fake_Foo() when you need to override.