0

是否可以在来自不同模块的特定方法中模拟全局对象,例如导入的模块?

例子:

import some_module

class MyClass():
    def a_method(self):
        some_module.do_something(1)
    def b_method(self):
        some_module.do_something(2)

我想修补some_module以设置的返回值do_somthing(),但仅限于a_method()而不是b_method()。当然我可以使用装饰器,但是我想从不同的模块进行修补。

4

1 回答 1

1

您不能修补some_module.do_something()限制为MyClass().a_method(),不。

您通常会及时选择修补的时间。仅在调用时应用补丁MyClass().a_method(),并确保在MyClass().b_method()调用之前再次撤消补丁。

一个好的单元测试已经确保您无论如何 a_method() 都要进行测试。如果a_method()不在测试中但被其他代码使用,直接patch out a_method()

于 2014-10-12T09:06:14.180 回答