首页 > 解决方案 > 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)    

标签: python

解决方案


看起来使用该mock将是处理像您这样的情况的好方法。

在您的情况下, a MockorMagicMock应该可以解决问题。

在您实例化类的同一个地方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

推荐阅读