Как сделать TDD с помощью pandas и pytest? - PullRequest
1 голос
/ 18 апреля 2020

У меня есть сценарий Python, который объединяет отчеты, используя Pandas в последовательности операций DataFrame (drop, groupby, sum, et c). Допустим, я начинаю с простой функции, которая очищает все столбцы, у которых нет значений, в качестве входных и выходных данных используется DataFrame:

# cei.py
def clean_table_cols(source_df: pd.DataFrame) -> pd.DataFrame:
   # IMPLEMENTATION
   # eg. return source_df.dropna(axis="columns", how="all")

В своих тестах я хотел убедиться, что эта функция фактически удаляет все столбцы, которые все значения пусты. Поэтому я организовал тестовый ввод и вывод и проверил с помощью функции assert_frame_equal из pandas .testing:

# test_cei.py
import pandas as pd
def test_clean_table_cols() -> None:
    df = pd.DataFrame(
        {
            "full_valued": [1, 2, 3],
            "all_missing1": [None, None, None],
            "some_missing": [None, 2, 3],
            "all_missing2": [None, None, None],
        }
    )
    expected = pd.DataFrame({"full_valued": [1, 2, 3], "some_missing": [None, 2, 3]})
    result = cei.clean_table_cols(df)
    pd.testing.assert_frame_equal(result, expected)

Мой вопрос: концептуально ли это модульный тест или e2e / интеграционный тест, поскольку Я не высмеиваю pandas реализацию. Но если я буду издеваться над DataFrame, я не буду тестировать функциональность кода. Каков рекомендуемый способ проверки следующих TDD рекомендаций?

Примечание: использование Pandas в этом проекте является проектным решением, поэтому нет намерения абстрагировать Pandas интерфейсы для замены это с другой библиотекой в ​​будущем.

...