Python 尽管满足要求,但单元测试失败

Python unit test fails despite meeting requirement

我正在参加一个在线 python 课程,需要我完成一些练习才能进步。这门课程的组织者说,他们有用户必须满足的可见和隐藏的要求,才能通过每项测试。本例probelem语句如下:

Write a function called manipulate_data which will act as follows: When given a list of integers, return a list, where the first element is the count of positives numbers and the second element is the sum of negative numbers. NB: Treat 0 as positive.

我想到了这个,我相信它通过了可见的要求,除了单元测试用例的 第 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

每次我 运行 代码时,我总是收到此错误消息,表明我的代码通过了三个测试中的两个,我假设是 test_only_list_allowed(self) 我对这种事情,我需要帮助。

测试表明代码预期字符串为 returnedassert 引发 AssertionError 异常。您想要 return 与 assertEquals() 测试正在寻找的字符串相同,因此 'Only lists allowed',而不是 msg 参数(当测试 失败).

而不是使用 assert 使用 return 和 return 预期的字符串:

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 比较的类型,所以你想先把那个测试排除在外。