我正在使用 Pytest 6.2.5 為 ML 專案的資料處理步驟撰寫我的第一個代碼測驗。代碼由一些函陣列成(我還沒有寫過一個類)。我想為流程的每個步驟加載一些測驗資料,并檢查函式是否回傳它們應該回傳的內容。我想將示例資料保存為字典,以便可以像這樣回圈:
def test_myfunc():
for datum in data:
newProperty = myfunc(dataum['property'])
assert testData[datum['idNumber']]['newProperty'] == newProperty
如果我在每個測驗函式中從檔案中讀取 testData,我只能這樣做,這似乎很愚蠢。如果我撰寫一個夾具來回傳 testData 字典,它仍然被視為一個函式,因為“E TypeError:'function' object is not subscriptable”。
我究竟做錯了什么?在所有教程中,他們只是在夾具內定義了一個虛擬資料,所以我還沒有找到一個例子。
多謝!
更新:我應該準確地寫出我是如何撰寫和使用夾具的。這是一個例子:
@pytest.fixture()
def actual_oxide_check():
with open('testDataDir/oxide_check_dict.pkl', 'rb') as f:
oxide_check_dict = pickle.load(f)
return oxide_check_dict
def test_oxide_check(actual_oxide_check):
mytestData = np.load('testData.npy', allow_pickle=True)
for Tdatum in mytestData:
other_anion, other_oxidation, bad_structure, primStruc = oxide_check(Tdatum['structure'])
assert other_anion == actual_oxide_check[Tdatum['material_id']]['other_anion']
在這里我加載 mytestData。如果我使用固定裝置,我也會遇到類似的問題。“函式不可迭代”。
uj5u.com熱心網友回復:
您需要提供夾具作為測驗的引數。
@pytest.fixture(scope="session")
def test_data():
# code to load data
return data_dict
def test_myfunc(test_data):
for datum in data:
new_property = myfunc(datum['property'])
assert test_data[datum['id_number']]['new_property'] == new_property
uj5u.com熱心網友回復:
好吧,我可能已經弄清楚我做錯了什么。
當你用 pytest 撰寫測驗函式時,你真的呼叫了那些函式嗎?喜歡test_oxide_check()?因為如果我不打電話給他們,他們會通過 :D
不好意思,第一次寫測驗!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/419470.html
標籤:
