首页 > 解决方案 > Python 模拟补丁本地函数

问题描述

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

例如:

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

标签: pythonpytestpython-mock

解决方案


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

推荐阅读