#python #python-3.x #pandas #dataframe #python-unittest
#python #python-3.x #pandas #фрейм данных #python-unittest
Вопрос:
У меня есть функция, которая возвращает фрейм данных, содержащий строки и столбцы. вот функция: app.py
def pandas_factory(colnames, rows):
return pd.DataFrame(rows, columns=colnames)
И вот мой модульный тестовый пример для того же: test_app.py
def test_panda_fact(self):
from dlp.dlp import pandas_factory
df1 = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
with pytest.raises(TypeError) as er:
mock_open = mock.mock_open(read_data=df1)
with patch('dlp.dlp.pandas_factory', mock_open):
obj = pandas_factory
self.assertTrue(obj)
Тестовый набор выполняется, но правильно ли я его тестирую?
Комментарии:
1. В чем смысл первого теста? На самом деле вы не используете
pandas_factory()
для создания фреймов данных, так что именно вы пытаетесь протестировать здесь? Кроме того, тестовые примеры жесткого кодирования, как правило, не очень хорошая идея.2. Можете ли вы объяснить, что вы пытаетесь сделать в оставшемся тесте?
3. @pavel да, я это понял. пожалуйста, проверьте обновленный вопрос
4. Я создал новый фрейм данных и пытаюсь его исправить
5. Я не думаю, что это правильный способ тестирования, и я не думаю, что вам нужен тест здесь. Как вы думаете, что именно вам нужно протестировать? Тот факт, что
pandas.DataFrame
он делает то, что должен делать? Или тот факт, чтоpandas_factory
объект существует?
Ответ №1:
Итак, вот пример того, как я бы приступил к тестированию этой функции:
import pandas
import numpy as np
from dlp.dlp import pandas_factory
def test_type():
df1 = pandas_factory(rows=np.array([[1, 2],[3, 4]]), colnames=['a', 'b'])
assert isinstance(df1, pandas.core.frame.DataFrame)
def test_size():
cols = np.random.randint(10, 100)
length = np.random.randint(10, 100)
data = np.zeros((length, cols))
df = pandas_factory(rows=data, colnames=[str(i) for i in range(cols)])
assert df.shape == (length, cols)
Что-то в этом роде. Здесь я предполагаю, что rows
это некоторая форма данных, например, массив numpy.