Python 单元测试如何模拟传入的类

问题描述 投票:0回答:1

尝试对接收类作为参数的方法进行单元测试,但不确定如何正确模拟它

我正在尝试对这个方法进行单元测试`

def get_local_path(p4_path, p4):
    if p4_path.endswith('...'):
        p4_path = p4_path.replace('/...', '')
    path = p4.run("where", p4_path)[0]
    for key, value in list(path.items()):
            if key == 'path':
                path = value.replace('\\', '/')
                return path

该方法从不同的脚本接收 p4 作为参数,p4 是 p4python 类(它已经实例化),所以我可以运行 p4 命令。我正在尝试学习如何进行单元测试,但真的不确定如何去嘲笑它。我尝试修补它,但这不起作用,然后我尝试创建一个 Mock 对象并将其传递进去,但我不知道当它调用 .run 时如何处理。

def test_get_local_path(self):
    mock_p4 = mock.Mock()
    # not sure what to do here, or how to get it to assign return value to p4.run
    get_local_path('//mypath/test', mock_p4)
python python-unittest python-unittest.mock
1个回答
0
投票

我用一个类

P4
和一个更短的函数
get_local_path
制作了一个简短的示例。希望这有帮助:

from unittest.mock import MagicMock

class P4:
    def run(self):
        return "foo"


def get_local_path(path, p4):
    return p4.run(path)

def test_get_local_path():
    mock_p4 = MagicMock(spec=P4)
    mock_p4.run.return_value = "run_p4"
    get_local_path('//mypath/test', mock_p4)
    mock_p4.run.assert_called_once_with('//mypath/test')

本次测试通过

© www.soinside.com 2019 - 2024. All rights reserved.