模拟的游标不返回值,而仅返回模拟的对象

时间:2019-05-17 11:23:33

标签: python unit-testing mocking cx-oracle

模块:工作

import db_connector_file

def run():
    con=db_connector_file.My_DB_conn()

    res=con.execute('select * from table_name')

    print res.fetchone()

模块:测试

def mock_execute(sql):
    res = mock.Mock(spec=cx_Oracle.Cursor)

    if 'table_name' in sql:
        res._next_result=[(2,)]
    else:
        res._next_result=[(10,)]
    return res


with mock.patch('work.db_connector_file.My_DB_conn.execute', side_effect=mock_execute):
    import work
    work.run()


  

当我运行模块测试时,我得到了

Mock name='mock.fetchone()' id='69673144'

Process finished with exit code 0
  

尽管我希望它会返回

[(2,)]
  

有没有一种方法可以使我完成这项工作,并且不返回模拟而是返回带有测试值的模拟。

     

     

在模拟时有没有办法跳过'spec ='参数并显式地返回带有值的ora游标,以便fetchone正常工作

0 个答案:

没有答案