Python 模拟补丁本地函数

时间:2021-04-07 21:18:57

标签: python pytest python-mock

我想检查是否调用了本地函数(在测试本身中声明)。

例如:

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()

如何在我的测试中模拟函数 test_this 的路径?

使用 .test_this 时出现错误:

E       ValueError: Empty module name

1 个答案:

答案 0 :(得分:1)

如果 test_this 是模拟函数,您可以将 test_this 定义为 Mock 对象并在其上定义断言:

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)