如何在函数内测试函数?

问题描述 投票:4回答:4

如果我有这样的功能:

def any_function(type_name, field_name):
    def another_function(name):
        ...

我怎么去测试any_function

如果我使用错误的测试定义,我的意思是写print(any_function(...))

python python-3.x unit-testing
4个回答
-1
投票

仅用于测试和调试目的,在开头放置一个globlal another_function语句,但不要忘记在测试后删除它。这将使您能够在调用外部函数一次以初始化它之后调试该内部函数。否则,因为another_function()将在any_function()的本地范围内,所以将调试放在any_function()中。

def any_function(type_name, field_name):
    global another_function  # Delete line in functional versions
    def another_function(name):
        pass

any_function(None, None)
print(another_function(...))

要么

def any_function(type_name, field_name):
    def another_function(name):
        pass
    print(another_function(...))  # Delete line in functional versions

any_function(None, None)

8
投票

你不会测试内部函数。你只需要测试外部函数的功能;内部函数是实现细节,而不是单元提供的API。您通常使用内部函数来生成闭包,使内部函数依赖于作用域。

现在,如果内部函数由外部返回,则测试返回值,就像你将任何函数的产品一样。

如果内部函数是独立的并且需要自己的测试,则不应该嵌套它。


0
投票

想象一下another_function被误删了。写一个测试来抓住它。

现在想象another_function又回来了。你怎么知道?

想象一下another_function中的一些代码被删除,或者在某种程度上被错误地改变了。编写测试以检测该错误。


0
投票

函数创建一个函数来a)使用它或b)返回它。在Python中,b)可能比a)更常见。 Martijn Pieters报道了a)。对于b),测试外部函数意味着调用它然后测试返回的函数。通常应该对外部函数的多个输入集合执行此操作,也就是说,对于多个返回的函数。一个例子:

import unittest as u

def adder(n):
    return lambda m: m+n

class Test(u.TestCase):
    def test_adder(self):
        add3 = adder(3)
        self.assertEqual((add3(-1), add3(0), add3(1)), (2, 3, 4))
        add_3 = adder(-3)
        self.assertEqual((add_3(-1), add_3(0), add_3(1)), (-4,-3,-2))

u.main()
© www.soinside.com 2019 - 2024. All rights reserved.