2016-12-18 12 views
0

Я занимаюсь онлайн-курсом python, который требует выполнения некоторых упражнений для достижения прогресса. Оргинаторы этого курса говорят, что у них есть видимые и скрытые требования, которые пользователь должен выполнить, пройти каждый тест. В этом случае оператор probelem выглядит следующим образом:Тест на модуле Python не выполняется, несмотря на требования к собранию

Напишите функцию под названием manipulate_data, которая будет действовать следующим образом: Когда дан список целых чисел, возвращает список, где первый элемент является подсчет числа срабатываний а второй элемент - сумма отрицательных чисел. NB: Обработать 0 как положительный.

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

def manipulate_data(listinput): 
    report = [0,0] 
    if type(listinput) != list: 
    #I may need some work here.. see unit test line 6 
     assert "invalid argument" 
    for digit in listinput: 
    #is an even number so we increment it by 1 
     if digit >= 0 and type(digit) == int: 
      report[0] += 1 
    #number is less than zero, adds it sum 
     elif digit < 0 and type(digit) == int: 
      report[1] += digit 
    return report 

Everytime я бегу код, я всегда получаю сообщение об ошибке, сообщающий что мой код пропускает 2 теста из трех, которые, как я полагаю, test_only_list_allowed(self). Я не очень разбираюсь в подобных вещах, и мне нужна помощь. enter image description here

Unit Test

ответ

0

Тест показывает, что код ожидается строка будет вернулся. assert вызывает вместо этого исключение AssertionError. Вы хотите вернуть ту же строку, что и тест assertEquals(), поэтому 'Only lists allowed', а не аргумент msg (который отображается, когда тест не работает).

Вместо использования assertreturn использования, и вернуть ожидаемую строку:

if type(listinput) != list: 
    return "Only lists allowed" 

Обратите внимание, что обычно вы бы использовать isinstance() для проверки типов:

if not isinstance(listinput, list): 
    return "Only lists allowed" 
for digit in listinput: 
    if not isinstance(digit, int): 
     continue 
    if digit >= 0: 
     report[0] += 1 
    elif digit < 0: 
     report[1] += digit 

Я использовал один тест для целые числа вместо тестирования в каждой ветви. У вас может даже быть тип, который не поддерживает сравнение с 0, поэтому вы хотите сначала получить этот тест.

+0

Спасибо, работал как шарм. Был битвой в течение нескольких дней на этом –

+0

Я блуждал, если бы вы могли взглянуть на соответствующий вопрос, который дает проблему на [stackexchange] (http://softwareengineering.stackexchange.com/questions/338373/python-code-fails-unit-test -despite-meeting-requirements) –

+2

@ Nexima360: сделайте * не * вопрос о почтовом индексе на сайте Software Engineering. Если вы не можете опубликовать его здесь из-за ограничения по скорости, то * дождитесь, пока вы не сможете *, не используйте другой сайт, где такие вопросы не относятся к теме, как обход ограничений. –