python - 在python中模拟全局变量

标签 python python-2.7 unit-testing mocking python-unittest

我在主模块中有一个函数,它接受两个值并对它们执行操作。这使用在调用此函数之前创建的全局变量

def calc(keys,values):
    if globalvar == "calc":
        return sum(keys)
    else:
        return sum(values)

现在正在进行单元测试

class Testcalc(TestCase):
@mock.patch('module.globalvar ', "calc")
def test_unit(self,calc):
    keys=[1,2,3]
    values=[4,5,6]
    sum=module.calc(keys,values)
    """
    check asserts
    """

我收到无效参数的类型错误。

TypeError('test_unit() takes exactly 2 arguments (1 given)',)

谁能告诉我模拟全局变量的正确方法

更新: 这对我有用,不知道为什么

class Testcalc(TestCase):
@mock.patch('module.globalvar')
def test_unit(self,var):
    keys=[1,2,3]
    values=[4,5,6]
    var="calc"
    sum=module.calc(keys,values)
    """
    check asserts
    """

谢谢大家

最佳答案

A module.globalvar = 'anything' should be enough, no need to mock.patch

def test_calc2(self):
    keys = [1, 2, 3]
    values = [4, 5, 6]

    module.globalvar = "calc"
    sum = module.calc(keys, values)
    self.assertEqual(module.globalvar, 'calc')
    self.assertEqual(sum, 6)

    module.globalvar = 'other'
    sum = module.calc(keys, values)
    self.assertEqual(sum, 15)

This works using PropertyMock

@mock.patch('module.globalvar', new_callable=mock.PropertyMock)
def test_calc3(self, mocked_globalvar):

This is syntax right, but will fail the test, since the globalvar has to be set by PropertyMock

@mock.patch('module.globalvar')
def test_unit(self, mock_globalvar):

关于python - 在python中模拟全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51561321/

相关文章:

c# - System.Data.DataSet 未完全读取 XML 文件

python - 提取检测到的对象并保存到不同的图像 - OpenCV Python

javascript - 在 Istanbul 尔显示没有 'Ignore' 注释的真实测试覆盖率

python - Pandas - 获取当前行,将值与前 X 行进行比较并返回匹配项数(在 x% 范围内)

python - 根据纬度和经度过滤数据 - Numpy

python - 为什么在这段代码中先定义类变量,然后再将其转换为实例变量?

c - pwntools 中的 p64() 无法正常工作

C++ 模拟框架 : 'Generic' vs 'Declarative'

python - 从表中提取行

Python:选择字符串的一部分