正确的mock.patch路径

时间:2015-09-24 22:34:08

标签: python unit-testing mocking python-unittest

我在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'

2 个答案:

答案 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