python - 使用unittest和mock在python函数中修补变量
问题描述
我有以下 my_func.py 和 create_config 函数。
*my_func.py
from fabric.state import env
def create_config(node_name):
config = {
"log_level": "INFO",
"addr1": "127.0.0.1",
}
config["addr2"] = env.host
return config
我尝试了以下方法来模拟 env.host 变量,其中 env 是从 fabric.state 导入的。
*测试.py
import unittest
import my_func
import mock
class MyTestCase(unittest.TestCase):
def setUp(self):
self.master_config = {
"log_level": "INFO",
"addr2": "0.0.0.0",
"addr1": "127.0.0.1",
}
@mock.patch('env.host')
def test_create_consul_config(self, mock_host):
mock_host.return_value = "0.0.0.0"
result = my_func.create_config('master')
self.assertDictEqual(self.master_config, result)
if __name__ == '__main__':
unittest.main()
我收到“env”的导入错误。使用 python mock 在函数中模拟变量的最佳方法是什么?
ImportError: No module named env
解决方案
模拟变量
env.host
?
获取env
first的类型
In [6]: from fabric.state import env
In [7]: type(env)
Out[7]: fabric.utils._AttributeDict
env.host
是一个类的实例变量,mock有点不同,mock_env是object(AttributeDict),instance_variable宿主的赋值是直接赋值,不是带return_value
@mock.patch('my_func.env')
def test_create_consul_config(self, mock_env):
mock_env.host = 'xxx'
result = my_func.create_config('master')
self.assertDictEqual(self.master_config, result)
推荐阅读
- python - 将除列之外的列中的单元格求和在熊猫中
- flutter - 使用剪辑路径时颤振缺乏性能
- mysql - MySQL 显示比例
- python - '对象'对象没有态度'名称' discord.py
- java - 我们的项目是否使用 Java EE / Java SE?
- nvm - 无法在 Big Sur 上安装 nvm,找不到 CLT
- c# - c#驱动程序连接到副本集洪水mongodb.log with Authentication failed on arbiter
- django - 基于 Django 类的视图 - 如果用户已通过身份验证,则为 ListView,如果用户未通过,则为 FormView,相同的 URL
- python - PYTHON 中的错误变量分配
- ios - iOS:ibeacon 唤醒后恢复 BLE 连接