mock.patch 的正确路径
Correct path of mock.patch
我在 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'
我想你真的想像 @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()
对于你的"had to use the real path"问题,你只需要写下测试文件的最低公共祖先的路径和你要导入的文件。
如果你想使用导入的模块而不是字符串格式,我建议你使用 patch.object
.
我在 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'
我想你真的想像 @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()
对于你的"had to use the real path"问题,你只需要写下测试文件的最低公共祖先的路径和你要导入的文件。
如果你想使用导入的模块而不是字符串格式,我建议你使用 patch.object
.