我想测试一个函数的默认行为。 我有以下内容:
# app/foo.py
DEFAULT_VALUE = 'hello'
def bar(text=DEFAULT_VALUE):
print(text)
# test/test_app.py
import app
def test_app(monkeypatch):
monkeypatch.setattr('app.foo.DEFAULT_VALUE', 'patched')
app.foo.bar()
assert 0
输出为hello
,并不是我想要的。
一个解决方案是显式传递默认值:app.foo.bar(text=app.foo.DEFAULT_VALUE)
。
但有趣的是,当默认值为全局范围时,这似乎不是一个问题:
# app/foo.py
DEFAULT_VALUE = 'hello'
def bar():
print(DEFAULT_VALUE)
输出结果为已修补
。
为什么会发生这种情况?是否有比显式传递默认值更好的解决方案?