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
。
我正在寻找一种方法来模拟 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
。