mock.patch的正确路径

Ben*_*lca 14 python unit-testing mocking python-unittest

在 Python 中使用模拟时,我遇到了计算路径的问题。

假设我有以下文件

文件1.py

def func1():
    return 'X'
Run Code Online (Sandbox Code Playgroud)

文件2.py

from file1 import func1

class ClassA():

    def func_that_uses_func1(self):
        x = func1()
Run Code Online (Sandbox Code Playgroud)

如何修补 ClassA 上 func1 的使用?我尝试过 @mock.patch('file2.func1'),但出现错误AttributeError: <class 'ClassA'> does not have the attribute 'func1'

idj*_*jaw 11

我认为你想真正进行模拟@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()
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。这种由内而外的东西让我在几个小时的研究中感到恶心,这很简单 (2认同)