亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用用于播種模塊作用域固定裝置的相同代碼正確地對函數進行 pytest

如何使用用于播種模塊作用域固定裝置的相同代碼正確地對函數進行 pytest

郎朗坤 2023-08-22 10:13:12
我創建了一個固定裝置,可以從數據庫中提取數據并將其放入 DataFrame 中,以便所有后續測試都可以在同一查詢輸出上運行。相同的代碼在一個函數中上演,該函數啟動我的數據處理管道(我正在圍繞該管道構建所有這些測試)。我不確定是否要模擬數據庫查詢結果,因為我想測試查詢返回的列名并記錄其他內容的唯一性。我感到困惑的是如何正確測試代碼中與夾具執行相同操作的函數output_data。在我的應用程序中為燈具復制代碼是否正確?# df_service.pyfrom project.settings import MSSQL_DB_CON_STR as condef df_from_sql(start_date, months):         sql = f"SELECT * FROM dbo.awesome_table_value_function('{start_date}', {months})"        return pd.read_sql(sql=sql, con=con)    這是我在認識到我正在為我實際上想要測試并用作夾具的功能創建夾具之前開始使用的夾具。# test_df_service.pyimport pytestimport pandas as [email protected](scope="module")def output_data():    from project.settings import MSSQL_DB_CON_STR as con    start_date = "11/1/2019"    months = 4    sql = f"SELECT * FROM dbo.awesome_table_value_function('{start_date}', {months})"        return pd.read_sql(sql=sql, con=con)       return pd.read_sql(sql=sql, con=con)def test_columns(output_data):    expected_columns = ['entity','attribute','value','effective_date']    df = output_data    for col in df.columns:        assert col in expected_columns 
查看完整描述

1 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

因此,您可以采用以下一種方法來解決此問題:

由于該df_from_sql()函數位于您的應用程序的范圍內,因此它也應該是您真正想要測試的函數。因此,我會為該函數編寫一個 pytest 測試,斷言諸如Does it return X number of columnsorIs the number of rows > 0等內容(如果您不能保證每次都返回相同的數據)。

我明白為什么您想要使用該函數來創建夾具,但這會帶來以下風險:

  • 由于某種原因獲取數據的功能不起作用。那么你所有的測試都可能會失敗,因為你的測試ouput data不是他們所期望的。

  • 數據庫中的數據可能會發生變化,因此您會得到與預期不同的結果。

理論上,裝置應該在空間和時間上盡可能固定,所以我建議是將所需的數據實際保存output_data在某個文件中,或者可能保存在數據庫的模擬表中,以確保它永遠不會改變。


查看完整回答
反對 回復 2023-08-22
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號