Python - 没有doctest的测试功能

时间:2017-11-08 01:41:45

标签: python testing reverse doctest

我目前正在编写两个反转字符串的函数。我已经编写了这两个函数。现在我试着写一个函数,它有一系列测试用例,可以用来测试两个函数,而不是调用doctest(因为两个函数都有相同的测试)。

但我不确定如何调用这些函数。这是我拥有的。

def strReverseI(s):
    '''(str) -> str

    Takes a str and reverses it into a new string.

    >>> strReverseR('Hello World!')
    '!dlroW olleH'

    >>> strReverseR('CIS 210')
    '012 SIC'
    '''

    x = len(s) - 1


    new = ''
    while x >= 0:
        new = new + str(s[x]) #last char of s
        x = x - 1 #goes down back one char in s

    return new

def test_reverse(f):

    testcases = (('', ''),
                 ('a', 'a'),
                 ('xyz', 'zyx'),
                 ('testing123', '321gnitset'),
                 ('hello, world', 'dlrow ,olleh')
                )


    for i in testcases:
        if f(i) != True:
            return False
        else:
            return True

我想将strReverseI传递给test_reverse,如果它通过所有测试则返回true,否则返回false。我如何将strReverseI传递给test_reverse?

我已尝试过" test_reverse(strReverseI),但它要求strReverseI的参数。不知道该通过什么。

有什么想法吗?

编辑:我意识到我的功能测试功能不应该测试是真还是假。那是我用于测试其他东西的不同设置。否则,我会改变它,看看是否' a' ==' a'。无论如何,问题的前提仍然是一样的。仍然不确定如何使用另一个函数作为参数调用该函数。

1 个答案:

答案 0 :(得分:0)

您可以将函数作为第一类对象传递:

def test_reverse(functions):
    ...
    for function in functions:
        for case in testcases:

            function(test)  #<-- call the function to test here
                            # and handle the results as needed
                            # maybe in a try/except block

并调用这样的测试:

functions = [strReverseI, strReverseII]
test_reverse(functions)

另请参阅this answer,了解其他用途