尝试对接收类作为参数的方法进行单元测试,但不确定如何正确模拟它
我正在尝试对这个方法进行单元测试`
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)
我用一个类
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')
本次测试通过