繁体   English   中英

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

[英]Mocking a local variable of a function in python

我是 python 中模拟和单元测试的新手。 如何模拟函数的局部变量? 例如,如何在测试时将age更改为 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()

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

据我所知, 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可能无法按预期工作。 有关进一步说明,请参阅修补位置

我无法想象你为什么要这样做。 测试是为了检查您的实际函数是否按照它们的编写方式工作,而不是改变它们的工作方式,以便它们与任意测试相匹配。

无论如何,我怀疑你想传递一个带有默认值的参数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM