我創建了一個固定裝置,可以從數據庫中提取數據并將其放入 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 columns
orIs the number of rows > 0
等內容(如果您不能保證每次都返回相同的數據)。
我明白為什么您想要使用該函數來創建夾具,但這會帶來以下風險:
由于某種原因獲取數據的功能不起作用。那么你所有的測試都可能會失敗,因為你的測試
ouput data
不是他們所期望的。數據庫中的數據可能會發生變化,因此您會得到與預期不同的結果。
理論上,裝置應該在空間和時間上盡可能固定,所以我建議是將所需的數據實際保存output_data
在某個文件中,或者可能保存在數據庫的模擬表中,以確保它永遠不會改變。
添加回答
舉報
0/150
提交
取消