Я написал простой скрипт Pricing Service. Я хочу написать сейчас модульные тесты для него. Как бы ты предложил мне это сделать? Должен ли я проверить вывод только каждой функции или что-то еще? Я читал о модульных тестах, но не уверен, как правильно их реализовать в своем скрипте. Буду благодарен за все советы!
Ниже Вы можете найти мой код. Я знаю, что это грязно и имеет плохую сложность, но на данный момент достаточно (я буду менять многие вещи в будущем, как заменить iterrows () et c.)
import pandas as pd
def read_data():
data = pd.read_csv("data.csv")
matchings = pd.read_csv("matchings.csv")
currencies = pd.read_csv("currencies.csv")
return data,matchings,currencies
def write_data(filtered_data):
filtered_data.to_csv('top_products.csv',index=False)
def conversion(data,curriencies):
for index,row in data.iterrows():
if row['currency'] == 'GBP':
data['price'][index] = row['price'] * curriencies['ratio'].loc[
curriencies['currency'] =='GBP']
data['currency'].loc[index] ='PLN'
data['total_price'] = data['price'] * data['quantity']
elif row['currency'] == 'EU':
data['price'][index] = row['price'] * curriencies['ratio'].loc[
curriencies['currency'] == 'EU']
data['currency'].loc[index] ='PLN'
data['total_price'] = data['price'] * data['quantity']
elif row['currency'] == 'PLN':
data['total_price'] = data['price'] * data['quantity']
return data
def filter(data,matchings):
data = data.sort_values(by=['matching_id','total_price'],ascending=False)
data_copy = data.copy()
filtered_data = pd.DataFrame(columns=['ignored_products_count'])
for index,row in matchings.iterrows():
data[data['matching_id'] == row['matching_id']] = data[
data['matching_id']==row['matching_id']].iloc[
0:row['top_priced_count']]
filtered_data = filtered_data.reset_index(drop=True)
filtered_data['total_price'] = data.groupby('matching_id')[
'total_price'].sum()
filtered_data['avg_price'] = data.groupby(['matching_id'])[
'total_price'].mean()
filtered_data['currency'] = data['currency']
data = data.dropna()
filtered_data['matching_id'] = filtered_data.index
for index,row in filtered_data.iterrows():
filtered_data['ignored_products_count'].loc[index] = len(data_copy[
data_copy['matching_id'] == row['matching_id']]) - len(
data[data['matching_id'] == row['matching_id']])
filtered_data = filtered_data.reset_index(drop=True)
filtered_data = filtered_data[['matching_id','total_price','avg_price',
'currency','ignored_products_count']]
print(filtered_data)
return filtered_data
if __name__ == "__main__":
data,matchings,currencies = read_data()
converted_data = conversion(data,currencies)
filtered_data = filter(converted_data,matchings)
write_data(filtered_data)