我正在尝试模拟模块中全局变量格式方法中使用的方法。我要测试的文件如下:
do_work.py
from foo import bar
LINK = "foobar.com"
def generate_foobar():
return "visit {}".format(bar(LINK))
FOOBAR = generate_foobar()
bar函数定义如下:
foo.py
def bar(link):
return "<{}>".format(link)
测试定义如下:
test_foobar.py
import pytest
from do_work import LINK, generate_foobar
def test_foobar(mocker):
mocker.patch("do_work.bar", return_value=LINK)
from do_work import FOOBAR
expected_value = "visit {}".format(LINK)
assert generate_foobar() == expected_value # <- this assert passes
assert FOOBAR == expected_value # <- this assert fails
即使在修补函数之后bar()
,带有 GLOBAL VARIABLE 的断言也会失败。我不确定为什么不模拟全局变量中使用的方法。有没有办法模拟这个?或者它是我们无法修补的东西,因为函数在它自己的范围内执行,然后变量作为静态值导入?