在python中模拟函数的局部变量

时间:2013-09-21 09:39:16

标签: python

我是python编程中的模拟和单元测试的新手,如何在测试时模拟函数ex:10岁而不是27的局部变量,请你修改下面的代码。谢谢提前。

# data_source.py
def get_name():
    age = 27 #real value
    return "Alice"

# person.py
from data_source import get_name

class Person(object):
    def name(self):
        return get_name()


from mock import patch
from person import Person

 - unit test

@patch('person.age')
def test_name(mock_age):
    mock_age = 10 # mock value
    person = Person()
    name = person.name()
    assert age == 10

2 个答案:

答案 0 :(得分:0)

我无法想象你为什么要这样做。测试用于检查您的实际功能是否按照它们的编写方式工作,而不是改变它们的工作方式,因此它们匹配任意测试。

在任何情况下,我怀疑你想传递一个默认值的参数:

def get_values(age=27, name="Alice")
    ...

答案 1 :(得分:0)

据我所知,mock无法模拟局部变量。它只能模拟非本地对象。

尝试模拟局部变量听起来很可疑。也许您应该尝试另一种方式。尝试使age成为全局变量或类变量。然后,您可以使用mock模拟全局变量或类变量。

例如:

# source file
G_AGE = 27

def get_name():
    return "Alice"

# unit test file
...
@patch('XXX.G_AGE')
def test_name(mock_age):
    mock_age = 10
    ....

只需注意patch的使用:mock如果使用不正确,可能无法按预期工作。有关更多说明,请参见Where to patch