【问题标题】:Python unit test fails despite meeting requirement尽管满足要求,Python 单元测试仍失败
【发布时间】:2016-12-18 11:29:18
【问题描述】:

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

写一个函数名操作数据,它的作用如下: 当给定一个整数列表时,返回一个列表,其中第一个元素是正数的计数,第二个元素是负数的总和。 注意:将 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

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

【问题讨论】:

    标签: python unit-testing assertion


    【解决方案1】:

    测试表明代码期望一个字符串被返回assert 会引发 AssertionError 异常。您希望返回与 assertEquals() 测试正在寻找的字符串相同的字符串,因此是 'Only lists allowed',而不是 msg 参数(当测试失败时显示)。

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

    【讨论】:

    • 谢谢,很有魅力。已经为此奋斗了好几天
    • 如果你能看看在stackexchange 上提出问题的相关问题,我正在徘徊
    • @Nexima360:请不要在软件工程网站上发布代码问题。如果由于速率限制而无法在此处发布,请等到可以发布为止,不要使用此类问题与主题无关的其他网站来绕过限制。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多