Как проверить pandas DataFrame с текущей меткой времени - PullRequest
0 голосов
/ 05 августа 2020

Я собираюсь протестировать my_function () , который возвращает pandas DataFrame со столбцом «utc_timestamp». Этот столбец содержит текущую временную метку.

def my_function():
    df = pd.DataFrame(data=[[1, pd.datetime.utcnow()]], columns=['value', 'utc_timestamp'])

Как я могу определить модульный тест для проверки ожидаемого результата my_function () . Очевидно, что следующий подход не будет работать, потому что текущая отметка времени в тестовой функции не равна отметке времени, когда был создан фрейм данных.

class TestCase(unittest.TestCase):
    df_out = my_function()
    df_expected = pd.DataFrame(data=[[1, pd.datetime.utcnow()]], columns=['value', 'utc_timestamp'])
    pd.testing.assert_frame_equal(df_out, df_expected)

>> AssertionError: DataFrame.iloc[:, 0] (column name="utc_timestamp") are different

Какой из них самый профессиональный, самый pythoni c и самый pandas -путь?

1 Ответ

0 голосов
/ 16 августа 2020

Я не уверен, нашли ли вы способ модульного тестирования, но вот способ модульного тестирования вашего DataFrame ...

Вы должны исправить pd.datetime.utcnow и задайте для нее значение stati c date. Затем вы можете использовать оператор assert, чтобы проверить, равны ли два DataFrames.

import unittest
import pandas as pd
from unittest.mock import patch
from pandas.util.testing import assert_frame_equal

with patch('pandas.datetime.utcnow', return_value="2020-08-16 20:36:06.578174"):
              actual = my_function()
              expected = pd.DataFrame(data=[[1, "2020-08-16 20:36:06.578174"]], columns=['value', 'utc_timestamp'])
              assert_frame_equal(actual, expected)
...