Python:如何模拟设置类变量的函数调用

时间:2018-01-11 16:23:12

标签: python mocking pytest

说我有module.py

中的课程
class A():
    INPUTS = {}

    def __init__():
        self.inputs = do_something(self.INPUTS)

class B(A):
    INPUTS = function_with_external_API_call()

    def something_to_test():
        pass # do stuff

在我的单元测试中(使用pytest)我希望有一个B的实例,以便我可以测试B.something_to_test()。但是,导入班级B会触发function_with_external_API_call()

此解决方案有效,但似乎是一个糟糕的解决方案。

with requests_mock.mock() as m:
    m.get(
        'https://url.com',
        json={'data': [{'id': '1'}]}
    )
    from module import B

如何模拟函数调用,以便我可以导入类B并用模拟值替换INPUTS

1 个答案:

答案 0 :(得分:0)

我并不完全明白您尝试做什么,但INPUTS在您的情况下是类属性。如果您想要修改INPUTS&叫做,我认为这样做会更简单:

class A(object):
    def __init__(self, mookup=None):
        self.INPUTS = mookup

class B(A):
    def __init__(self):
        super().__init__(self.function_to_call)
    def function_to_call(self):
        pass

如果这不能解答您的问题,请为您的问题添加更多精确度吗?