我是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
答案 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。