Python模块中全局变量中使用的补丁方法

问题描述

我正在尝试模拟模块中全局变量的format方法中使用的方法。我要测试的文件如下:

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的断言也会失败。我不确定为什么不模拟全局变量中使用的方法。有没有办法模拟这个?还是我们无法修补该函数,因为该函数在其自己的作用域中执行,然后将该变量作为静态值导入?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)