我正在try 使用pytest为我的python项目编写单元测试.我有一个来自另一个repo的模块,名为SQL_SERVICES.在SQL_SERVICES中,有一个我试图模拟的名为READ_SQL的函数.
到目前为止,如果我像这样导入模块,我只能模拟该函数
import sql_services
并调用sql_services.read_sql,但如果导入以下函数,
from sql_services import read_sql
这是一个问题,因为我的代码库使用后一种方法来导入函数
下面是我try 编写的单元测试的函数:
from sql_services import read_sql
def foo():
df = read_sql("SELECT * FROM schema.table")
return df
以下是我到目前为止拥有的单元测试文件:
import pytest
import unittest.mock as mock
import pandas as pd
import sql_services
from entry import foo
@mock.patch("sql_services.read_sql")
def test_read_sql(mock_read_sql):
mock_read_sql.return_value = pd.DataFrame()
df = sql_services.read_sql("SELECT * FROM schema.table")
assert df.empty
@mock.patch("sql_services.read_sql")
def test_do_a_read(mock_read_sql):
mock_read_sql.return_value = pd.DataFrame()
df = foo()
assert df.empty
第一个测试通过,第二个测试失败,因为它实际上从数据库中读取数据帧.有没有什么方法可以在不重构整个代码库的情况下从foo中模拟该函数?