我正在嘗試在 pytest 中重用相同的資料框。我已經在init方法中對其進行了初始化,但我想將其更改為 pytest 夾具,然后將其傳遞給每個方法。我正在努力使用 pytest 來應用它。
import pytest
import utils
import numpy as np
import pandas as pd
from datetime import datetime
class TestGetDatesCorrespondingToReference:
# @pytest.fixture(
# scope="module",
# params=df_input)
def __init__(self) -> None:
self.df_input = pd.DataFrame({
'table_id' : ['all_legs_predictions_20220914_20220607',
'all_legs_predictions_20210914_20210607'] ,
'prefix' : [datetime(2022, 9, 14, 0, 0),
datetime(2021, 9, 14, 0, 0)] ,
'suffix' : [datetime(2022, 6, 7, 0, 0),
datetime(2021, 6, 7, 0, 0)]
})
def test_get_dates_corresponding_to_reference(self):
actual = self.df_input\
.pipe(utils.get_dates_corresponding_to_reference,"20221105" )
expected = pd.DataFrame({
'table_id' : ['all_legs_predictions_20220914_20220607'] ,
'prefix' : [datetime(2022, 9, 14, 0, 0)],
'suffix' : [datetime(2022, 6, 7, 0, 0)] })
pd.testing.assert_frame_equal(actual, expected)
uj5u.com熱心網友回復:
@pytest.fixture您應該使用裝飾器定義一個新函式。
通常夾具定義在檔案名 conftest.py 中。但是,您也可以在測驗檔案中定義它。
因此,根據您的示例,我相信您想要實作以下目標:
class TestGetDatesCorrespondingToReference:
def test_get_dates_corresponding_to_reference(self, some_dataframe):
actual = some_dataframe \
.pipe(utils.get_dates_corresponding_to_reference, "20221105")
expected = pd.DataFrame({
'table_id': ['all_legs_predictions_20220914_20220607'],
'prefix': [datetime(2022, 9, 14, 0, 0)],
'suffix': [datetime(2022, 6, 7, 0, 0)]})
pd.testing.assert_frame_equal(actual, expected)
@pytest.fixture(scope="module")
def some_dataframe():
return pd.DataFrame({
'table_id': ['all_legs_predictions_20220914_20220607',
'all_legs_predictions_20210914_20210607'],
'prefix': [datetime(2022, 9, 14, 0, 0),
datetime(2021, 9, 14, 0, 0)],
'suffix': [datetime(2022, 6, 7, 0, 0),
datetime(2021, 6, 7, 0, 0)]
})
請注意,您使用夾具名稱作為測驗方法的引數,然后它將夾具的輸出存盤在此變數中。
還要確保你想要這個范圍的夾具。module意味著您將為每個模塊計算一次此夾具的輸出。因此,如果您在模塊的一個測驗中更改輸出資料幀,它將在該模塊的所有測驗中保持更改。
如果要在每個測驗中重新計算夾具值,請使用function范圍。
您可以在此處了解有關固定裝置及其范圍的更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/533235.html
