导入的模块和全局变量

时间:2020-09-21 05:28:31

标签: python unit-testing module

我试图用python为功能为y的代码X编写单元测试。在测试代​​码中,我使用: 从X导入y。

但是,在X内,还有其他函数(函数z)定义了全局变量。 在测试代​​码中,导入并调用函数y时,会出现此错误,即未定义这些全局变量(因为我特别是仅调用函数y,而不是z)。

是否可以在测试代码中定义那些所需的全局变量并运行导入的函数(“ y”)?

这是代码X:

def calc_z:
    global a, b, c
    return(a+b+c)

def calc_y:
    return(a*b*c)

我正在为calc_y编写单元测试。在单元测试中: 从X导入calc_y。但是calc_y使用的是calc_z中定义的全局变量。我以为可以在测试文件中定义全局a,b,c来删除calc_z对calc_z的依赖关系,但这没用。

1 个答案:

答案 0 :(得分:0)

确实可以在函数内定义全局变量,尽管这是不好的编程风格(但我知道您不能更改此设置)。这会更改变量的创建时间(通常仅在调用该函数时创建),而不会更改位置-它们仍然全局存在于模块中,您仍然可以从外部在此处进行设置。

因此,您的示例的测试可能如下所示(假设您使用pytest):

import x
 
def test_calc_y():
    x.a = 1
    x.b = 2
    x.c = 3
    assert x.calx_y() == 6