好的,我知道这很明显,但我无法弄清楚如何为内部函数编写测试。这是一段简单的代码来说明问题。
def high(x, y):
def low(x):
return x*2
return y*low(x)
class TestHigh(unittest.TestCase):
def test_high(self):
self.assertEqual(high(1,2),4)
def test_low(self):
self.assertEqual(low(3),6)
结果
Exception: NameError: global name 'low' is not defined
在“真实”情况下,我希望能够单独测试较低级别的功能,以确保所有路径都被执行,这在仅从较高级别进行测试时很麻烦。
答案 0 :(得分:2)
low嵌套在high函数中,因此无法从函数外部访问它。您的函数的等价物将是high(3,1)
答案 1 :(得分:2)
您编写测试以确保公开可见的界面根据其规范执行。您不应该尝试为未公开的内部功能编写测试。
如果您无法通过low()
的结果对high()
进行全面测试,那么low()
的未经测试的部分对外面的任何内容都无关紧要。
答案 2 :(得分:1)
BAD :尝试创建一个类并将函数作为方法(或静态函数)添加到其中。
(我会把这里作为不做的参考。)
GOOD :编写模块级功能或接受无法测试嵌套。