如何在函数内测试函数?

时间:2015-02-15 21:35:21

标签: python python-3.x unit-testing

如果我有这样的功能:

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

我将如何测试any_function

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

4 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:0)

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

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

想象一下another_function中的某些代码被删除,或者以某种方式被错误地更改。编写测试以检测该错误。

答案 2 :(得分: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()

答案 3 :(得分:-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)