23

我将如何测试不返回任何内容的函数?

例如,假设我有这个功能:

def is_in(char):
    my_list = []
    my_list.append(char)

然后如果我要测试它:

class TestIsIn(unittest.TestCase):

    def test_one(self):
    ''' Test if one character was added to the list'''
    self.assertEqual(self.is_in('a'), # And this is where I am lost)

我不知道要断言该函数等于什么,因为没有任何返回值可以与之进行比较。

assertIn 会起作用吗?

4

2 回答 2

36

所有 Python 函数都会返回一些东西。如果不指定返回值,None则返回。因此,如果您的目标确实是确保某事不返回值,您可以说

self.assertIsNone(self.is_in('a'))

(但是,这无法区分没有显式返回值的函数和有返回值的函数return None。)

于 2014-02-11T23:29:35.323 回答
4

单元测试的重点是测试函数所做的事情。如果它没有返回一个值,那么它实际上在做什么?在这种情况下,它似乎没有做任何事情,因为my_list它是一个局部变量,但如果你的函数实际上看起来像这样:

def is_in(char, my_list):
    my_list.append(char)

然后你会想要测试是否char真的附加到列表中。您的测试将是:

def test_one(self):
    my_list = []
    is_in('a', my_list)
    self.assertEqual(my_list, ['a'])

由于该函数不返回值,因此无需对其进行任何点测试(除非您需要确保它不返回值)。

于 2013-02-14T05:15:39.477 回答