2017-03-22 15 views
1

私はコードを持っている次のfile1.pyを持っています。私は以下run_q()python mock for mysql

file1.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()メソッドのモックを提示する方法がわかりません。これはそれを提示する正しい方法ですか?

test_file1.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) 

答えて

1

あなたは、ほぼ右のそれを得ました。 run_qを模擬する必要はありません。テストの中で呼び出すだけです。

実施例:

app.py

def exec_mysql(query): 
    # do something 
    return query 


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

tests.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 ===================