我是python编程中的模拟和单元测试的新手,我如何在测试时模拟ex: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()
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
Run Code Online (Sandbox Code Playgroud)
据我所知,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
....
Run Code Online (Sandbox Code Playgroud)
使用时请注意patch:mock如果使用不当,可能无法发挥预期效果。请参阅修补位置以获取进一步说明。
我无法想象你为什么要这样做。测试是为了检查您的实际函数按照编写的方式工作,而不是改变它们的工作方式以便它们匹配任意测试。
无论如何,我怀疑您想传递一个具有默认值的参数:
def get_values(age=27, name="Alice")
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5989 次 |
| 最近记录: |