在init方法Python中调用函数调用

时间:2017-10-26 19:40:07

标签: python unit-testing mocking init

我正在编写单元测试以确保正确创建我的类对象,并且此对象依赖于从s3获取内容。我想模仿完全调用s3的函数,:

class SomeClassTest(unittest.TestCase):

    @patch('someDir.util._call_to_s3')
    def test_someclass_load(self, magic_mock):
        magic_mock.return_value = {"host": "bogus.com"}
        some_class = SomeClass()

        self.assertGreater(len(some_class), 0)

class SomeClass():

    def __init__():
        try:
            content = _call_to_s3(bucket_name, file_name)
        except:
            rest of code ...

如何模拟在另一个库文件中定义的函数_call_to_s3?

1 个答案:

答案 0 :(得分:1)

当您进行monkeypatch时,您需要更改名称,使其指向不同的值。你没有改变价值本身。关键是修补您正在测试的设备正在使用的名称。

每次你从foo导入栏"开始,你就会创建一个新的本地名称副本。在这种情况下,看起来SomeClass不在someDir.util模块中。让我们在someDir.other_mod

中说出来

someDir.other_mod将从someDir.util import _call_to_s3"中执行类似"的操作。这将创建一个新名称someDir.other_mod._call_to_s3。这就是SomeClass使用的名称,因此这是您需要修补的名称。

e.g。 @patch(' someDir.other_mod._call_to_s3&#39)

无法修补指向特定值的每个名称。