我在Python中使用mock时遇到路径问题。
假设我有以下文件
file1.py
def func1():
return 'X'
file2.py
from file1 import func1
class ClassA():
def func_that_uses_func1(self):
x = func1()
如何在ClassA上修补func1的使用?我试过@ mock.patch('file2.func1'),但我收到错误AttributeError: <class 'ClassA'> does not have the attribute 'func1'
答案 0 :(得分:2)
我认为你实际上想把你的模拟作为@mock.patch('file2.func1')
。我的下面示例可能有所帮助:
from file2 import ClassA
from mock import patch
import unittest
class TestClassA(unittest.TestCase):
def setUp(self):
self.c = ClassA()
@patch('file2.func1')
def test_func(self, m_func1):
self.c.func_that_uses_func1()
self.assertEqual(m_func1.called, 1)
if __name__ == '__main__':
unittest.main()
答案 1 :(得分:1)
对于你的&#34;必须使用真正的路径&#34;问题,您只需要从测试文件的最低共同祖先和要导入的文件中编写路径。
如果您想使用导入的模块而不是字符串格式,我建议您使用patch.object
。