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.