python - python 测试作为一个独立的脚本
问题描述
我从相互依赖的模块的大型代码库中获取了以下代码。我想将它作为一个独立的单元运行以进行测试。
在下面调用 db_obj.create_connection() 时,我必须传递 debug_obj 的值,这意味着我必须导入我不想要的所有依赖实现。
但是,如果我将 None 作为 db_obj.create_connection(None) 传递,那么由于属性错误,它将在 debug_obj.info('inside create_connection') 处失败。除非我去禁用 debug_obj.info() 任何使用的地方。
处理这种情况的最佳方法是什么,您只想为您的单元测试禁用依赖库代码而不注释其调用。
import pyodbc
class DBOperations(object):
def __init__(self,db_params):
self.db_params=db_params
def create_connection(self, debug_obj):
debug_obj.info('inside create_connection')
mycode_to_run_create_connection
if __name__ == '__main__':
db_obj = DBOperations(db_params ='param_for_db_connection')
db_obj.create_connection(None)
解决方案
看起来使用该mock
库将是处理像您这样的情况的好方法。
在您的情况下, a Mock
orMagicMock
应该可以解决问题。
在您实例化类的同一个地方DBOperations
,您可以模拟debug_obj
:
from unittest.mock import Mock
...
...
if __name__ == '__main__':
debug_obj = Mock()
db_obj = DBOperations(db_params ='param_for_db_connection')
db_obj.create_connection(debug_obj)
一旦Mock
对象被实例化,就可以为其分配属性,例如:
debug_obj = Mock()
debug.info = print
debug.info('test')
# >>> prints the word test to the stdout
推荐阅读
- python - Python osX 输入命令在 Visual Studio Code 中给出错误
- ubuntu - Vagrant 如何安装 'vagrant-disksize' 插件
- c# - 无法将字符串传递给 Page.SetFocus
- javascript - Java脚本计算字典列表中的重复项
- node.js - AWS lambda 函数可以在一次运行中接收多个请求吗?
- solr - SOLR8.4.0 - SolrWriter 警告“创建文档时出错”,但没有关于原因的信息
- laravel - Laravel 自定义请求验证不起作用
- c - 如何使用键盘在终端输入中正确插入换行符('\n')?
- excel - 如何根据列标题和工作表名称之间的匹配将数据列复制到另一个工作表中?
- r - 将具有相同值的行组合在一列中并找到这些行的平均值