[英]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.