如何测试使用已经测试过的其他函数编写的函数?说一个函数f
已经有了单元测试,这样我们就可以相信它的行为如我们所期望的那样。这是写在条款f
另一个功能g
的一个简单的例子:如何对使用其他单元测试函数的函数进行单元测试?
def g(a,b):
return f(1/b, a)
是g
所做的唯一工作是它的参数一些操作和将它们传递给f
正确的方式(在一个更复杂的例子中,我们可能会有更多详细的参数操作)。由于f
已经过测试,因此我需要使用g
进行测试的唯一一件事是我正确操作了参数,并且在将它们传递给f
时我没有混淆它们。我看到两种方法:
- 经典方法:手工查找((arguments,expected_results)对并编写像
g(1,2) == 3
这样的测试。采用这种方法,我会暗中重新测试f
,因为我必须手工找到f(1/b, a)
的预期结果。另外,这可能是计算f(1/b,a)对于任何微不足道的b(例如f
被测试的值更容易)很难手工完成。 - 在测试中重复使用
f
:编写测试如assert g(1,2) == f(1/2, 1)
。但是这看起来很像重写函数g
的主体,其实参由实际值替换。因此,我可能会在函数体和测试中两次出现相同的错误。
什么是测试g
的最佳方式?除了这两个还有别的方法吗?
@VinceEmigh关于将'f'分解为2个单独的函数并独立测试它们,我认为尽可能将事情分开是很好的做法。但迟早你必须将所有东西绑定在一起,而且你仍然需要测试你是否正确地将函数的参数传递给函数。 –