用于 mysql 的 python 模拟

标签 python mysql unit-testing python-mock

我有以下包含代码的 file1.py。 我正在尝试创建模拟测试来测试 run_q()

文件1.py

def exec_mysql(query):
    mysql_conn = MySqlActions(..)
    ..
    cur.execute(query)
    mysql_conn.commit()
    mysql_conn.close()

def run_q():
    qa = "delete from table where dts = '%s'" % val
    exec_mysql(qa)

下面是模拟代码。不确定如何呈现 run_q() 方法的模拟。这是正确的呈现方式吗?

测试文件1.py

import mock
@mock.patch('file1.exec_mysql')
def test_run(mysql_mock)
    run_q = mock.Mock()
    query = "delete from table where dts = '2015-01-01'"
    mysql_mock.assert_called_with(query)

最佳答案

你几乎做对了。无需模拟 run_q - 您只需在测试中调用它即可。

工作示例:

app.py

def exec_mysql(query):
    # do something
    return query


def run_q():
    qa = 'blahblahblah'
    exec_mysql(qa)

测试.py

from unittest import mock
from app import run_q

@mock.patch('app.exec_mysql')
def test_run_q(mysql_mock):
    run_q()
    mysql_mock.assert_called_with('blahblahblah')

测试执行:

$ pytest -vvv tests.py 
===================== test session starts =====================
platform linux -- Python 3.5.2, pytest-3.2.1, py-1.4.34 
cachedir: .cache
rootdir: /home/kris/projects/tmp, inifile:
plugins: mock-1.6.2, celery-4.1.0
collected 1 item                                               

tests.py::test_run_q PASSED

================== 1 passed in 0.00 seconds ===================

关于用于 mysql 的 python 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42945569/

相关文章:

mysql - sql选择总和计数变量

unit-testing - 用 Spock 测试我的 Controller

python minidom创建带有结束标签的xml元素

python - 解包单值元​​组的可读约定

Python,sympy计算多变量函数

mysql - 执行动态mysql查询失败

php - 如何获得所有产品? MySQL, PHP

java - 如何使用 mockito 为 Controller 类编写单元测试用例

unit-testing - 未找到转换选项中的模块 <rootDir>/node_modules/vue-jest

python - 链接 ipython 小部件按钮和 slider 值