如何修补另一个Python文件导入的对象?

时间:2019-01-25 07:19:46

标签: python unit-testing mocking

示例abc.py:

from pack.def import Def

class Abc(object):
    def f(self):
        return Def().response()

示例test_abc.py

from unittest import mock, TestCase
from pack.abc import Abc

class TestAbc(TestCase):
    @mock.patch('pack.def.Def')
    def test_f(self, mock_def):
        responses = ['response1', 'response2', 'response3']
        mock_def.return_value.response.return_value = responses
        assert responses == Abc().f()

我认为模拟def已被修补,但是我做错了事,有人知道我做错了吗?

1 个答案:

答案 0 :(得分:0)

您必须模拟您正在使用的对象。您正在使用 abc 模块中属于 pack.def 软件包的Def。当您为Abc类编写测试并想要模拟Def调用时,必须模拟在 abc 中导入的Def,而不是从原始模块中导入的@mock.patch('pack.abc.Def')

使用@mock.patch('pack.def.Def')代替grep