以检查SQL查询的方式模拟数据库调用

时间:2016-12-21 08:20:53

标签: python unit-testing mocking

我有一个代码执行redshift查询,如下所示:

def send_sql_query(source, sql_query, lst=None):
        connection = psycopg2.connect(
                host=os.environ["REDSHIFT_HOST"],
                port="5439",
                dbname="dbname",
                user=os.environ["REDSHIFT_USERNAME"],
                password=os.environ["REDSHIFT_PASSWORD"],
        cursor = connection.cursor()
        cursor.execute(sql_query, lst)
        sql_results = cursor.fetchall()


        return sql_results
    finally:
        if connection:
            connection.close()

我想以一种它将检索和sql_query的方式来模拟该方法,并且该方法将保存假数据库数据(最好在json中),但是将使用sql_query在假数据上执行SQL并返回结果

使用mock.return_value和mock.side_effect无济于事,因为我想验证SQL查询是否正确。编写代码以返回结果并不能真正检查SQL查询

python中有框架吗?

1 个答案:

答案 0 :(得分:0)

测试SQL需要SQL引擎。由于不同的数据库使用不同的方言,并且当您使用PostgreSQL作为主数据库时,您应该使用假数据在您的开发环境中安装PostgreSQL实例,并在测试时将查询重定向到那里。

当您使用环境存储数据库的引用时,您只需设置一个指向测试数据库的测试环境。