如果我有这样的功能:
def any_function(type_name, field_name):
def another_function(name):
...
我将如何测试any_function
?
如果我使用错误的测试定义,我的意思是写作
print(any_function(...))
答案 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)