1

修補一個數據庫查詢:使用mysql.connector數據庫連接時要修補哪個目標?

進口mysql.connector 從瓶進口摹

@before_request 
def con(): 
    g.db=mysql.connector.connect("credentials") #database connection 

@route('/insert') #passing data for insertion as a 'json' string 
def insert(): 
    cursor = g.db.cursor() 
    cursor.execute('Insert into test("ID,name")') 
    cursor.close() 
    g.db.close() 

test.py

def test_conn(): 
with patch(app.mysql.connector) as mock_mysql: 
    conn() 
    mock_mysql.connect.assert_called_with("credentials") 

def test_insert(): 
with patch(target =?) as mock: 
    #mock execute() and close()? 

我必須修補我的(conn()g)或( mysql.connectorg)作爲目標?

如何模擬​​和close()

回答

1

你可以在這裏嘲笑mysql.connector.connect,並且模擬庫從那裏接管:

with patch(target='mysql.connector.connect') as mock: 

的代碼然後調用connect模擬,使貯存在g.db一個模仿對象。您可以在您的測試功能達到這些目標:

connection = mock.return_value 
cursor = connection.cursor.return_value 

,然後你可以測試是否connection.closecursor.executecursor.close已被調用。

+0

感謝您的幫助,但是您不認爲我還需要修補'g',因爲它是一個導入庫的庫,否則代碼將會調用'g'庫 – guri

+0

@guri:只需使用Flask測試工具,如測試客戶端或測試請求上下文;見http://flask.pocoo.org/docs/0.10/testing/ –

+0

非常感謝它的工作 – guri