Как выполнить модульное тестирование или использовать assert для данных? - PullRequest
0 голосов
/ 20 декабря 2018

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

Я пробовал это также из StackOverflow, но не работает:

input = pd.DataFrame.from_dict({
    'rev': [0],
    'price': [0]
})
expected = {
    'data': ['cool']
}

assert_dict_equal(expected, data(input).to_dict(),
                  "oops, there's a bug...")


def temperature(row):
    rev = row['rev']
    price = row['price']
    group = row['group']
    if group == 'error':
        return 'error'
    elif revenue > 2 * price:
        return 'cold'
    elif revenue >= price:
        return 'cool'
    elif revenue < 0.5 * price:
        return 'hot'
    elif revenue < price:
        return 'lukewarm'
    else:
        float('NA')

data['temp'] = sample.apply(temperature, axis=1)

assert temperature({"group": 'T2_Y2', "rev": 0, "price": 0}, 
                        "group", "rev", "price") == 'cool'

assert temperature({"group": 'T2_Y2', "rev": 30, "price": 10}, 
                        "group", "rev", "price") == 'cold'

assert temperature({"group": 'T2_Y2', "rev": 3, "price": 10}, 
                        "group", "rev", "price") == 'hot'

Ожидаемый результат должен возвращаться без ошибок, пока на выходе выдается ошибка.

TypeError: температура () принимает 1 позиционный аргумент, но 4 были заданы

1 Ответ

0 голосов
/ 21 декабря 2018

Ошибка явная: вы пытаетесь вызвать temperature функцию с 4 позиционными аргументами в ваших утверждениях, в то время как она занимает всего 1. Замените ваши утверждения этими:

assert temperature({"group": 'T2_Y2', "rev": 0, "price": 0}) == 'cool'
assert temperature({"group": 'T2_Y2', "rev": 30, "price": 10}) == 'cold'
assert temperature({"group": 'T2_Y2', "rev": 3, "price": 10}) == 'hot'

РЕДАКТИРОВАТЬ: на основе вашего комментария измените свою функцию на такую:

def temperature(row, group_col, rev_col, price_col):
    rev = row[rev_col]
    price = row[price_col]
    group = row[group_col]
    if group == 'error':
        return 'error'
    elif revenue > 2 * price:
        return 'cold'
    elif revenue >= price:
        return 'cool'
    elif revenue < 0.5 * price:
        return 'hot'
    elif revenue < price:
        return 'lukewarm'
    else:
        float('NA')

Затем сохраните свои утверждения как есть, и это должно работать

...