【问题标题】:mock global object in method namespace在方法命名空间中模拟全局对象
【发布时间】:2014-10-12 09:02:32
【问题描述】:

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

例子:

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()中。当然我可以使用装饰器,但是我想从不同的模块进行修补。

【问题讨论】:

    标签: python unit-testing mocking python-mock


    【解决方案1】:

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

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

    一个好的单元测试已经确保你测试只是a_method()无论如何。如果a_method() 不是在测试中,而是被其他的代码使用,那么直接修补a_method()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多