Search code examples
pythonpytestpython-mock

Python mock patch local function


I want to check if a local function (declared on the test itself) is called.

For example:

def test_handle_action():
    action = "test"
    user = "uid"
    room = "room"
    content = "test"
    data = {}

    def test_this(user, room, content, data):
        pass

    handlers = {action: test_this}

    with mock.patch("handlers.handlers", handlers):
        with mock.patch(".test_this") as f:
            handle_action(action, user, room, content, data)

            f.assert_called_with()

How can I mock path the function test_this inside my test?

With .test_this I got the error:

E       ValueError: Empty module name

Solution

  • If test_this is a mocked function, you can define test_this as a Mock object and define assertions upon it:

    from unittest import mock
    
    def test_handle_action():
        # GIVEN
        action = "test"
        user = "uid"
        room = "room"
        content = "test"
        data = {}
    
        test_this = mock.Mock()
    
        handlers = {action: test_this}
    
        with mock.patch("handlers.handlers", handlers):
            # WHEN
            handle_action(action, user, room, content, data)
    
            # THEN
            test_this.assert_called_with(user, room, content, data)