模块中单个函数的存根

Stub for a single function in module

我有一个项目的下一个结构:

# A.py
def foo():
    result = None
    # some long, very long calculations
    return result

# B.py
from A import foo
def bar():
    result = foo()
    # some not so long and complex calculations
    return some_other_result

# test.py
import A
import B

def setup_module():
    A.foo = lambda: return "Hello"

def test_foo():
    assert B.foo() == "Hello"

但是,这没有用,因为在 Bfoo 被直接导入。

如何存根 A.foo 函数?

注:我无法编辑A.pyB.py。只有用于测试的文件,所以从 from A import fooimport A 没有变化,并且可以在 B.py 中使用 A.foo

您可以在导入之前修补函数 B:

import A

def setup_module():
    A.foo = lambda: "Hello"

def test_foo():
    import B
    assert B.foo() == "Hello"

这样,A.foo 已经被 B 导入 A.foo 的时间所取代。