Pytest 模拟 perforce 运行

Pytest mock perforce run

我正在寻找一种方法来模拟 perforce 的 class 方法作为我 class 中的实例方法。

这是我的

my_test.py

import P4

class MyTest():
    def __init__(self):
        self.p4 = P4.P4()
        self.p4.connect()
    def run(self):
        self.files = self.p4.run('files', 'my-files-path')

基本上,我不希望我的单元测试发送触发器真正的 perforce 连接。这是我的测试代码。

test_my_test.py

from my_test import MyTest
from mock import patch
import P4

class Test():
    def test_answer(self):
        mock_p4_return = [
            {'depotFile': '//path1/'},
            {'depotFile': '//path1/'}, 
        ]
        my_test = MyTest()
        with patch.object(P4, 'run', return_value=mock_p4_return):
            my_test.run()
            assert my_test.files == mock_p4_return

但是我遇到了这个错误

AttributeError: <module 'P4' from 'c:\Python27\lib\site-packages\P4.pyc'> does not have the attribute 'run'

由于您正在测试的模块引用 P4.P4(模块 P4 内的 class P4),您需要修补 P4.P4在你的测试中。

如果您的代码做到了:

from P4 import P4

那么你只需要在两个地方使用P4