如何模拟数据库api?

时间:2012-10-11 13:02:58

标签: python database mocking tdd

连接数据库(即使它是内存中的数据库)会降低我的单元测试速度(目前耗时超过5分钟)。

所以我正在考虑模拟数据库api。

使用真实数据库api,如果有任何SQL语法错误或错误输入的列名,则会引发异常。

使用模拟对象时,我想不出任何方法可以进行这种检查。

是否可以使用模拟对象实现此目的?

1 个答案:

答案 0 :(得分:3)

当然!您可以使用自己的自定义函数模拟db-api函数,这些函数的行为方式符合您的要求:

from sqlite3.dbapi2 import DatabaseError

mock_db_connection = Mock()

def mock_execute(query, params):
    if query == 'select firstname, lastname from student':
        return [('jim', 'brown')]
    elif query == 'select; firstname':
        raise DatabaseError('You have an error in your SQL syntax')

mock_db_connection.execute = mock_execute

# from this point, if you've patched out your db connection with the mock,
# you can make tests against connection.execute...

我假设你正在使用mock库。

但实际上 - 5分钟不是 长。个人偏好,但我更喜欢保持这样的依赖 - 它可以帮助你捕获api错误。你永远不会完美地嘲笑API,而且数据库不是 严重的外部依赖...