擅长:python、mysql、java
<p>即使在执行'TDD'时,检查<em>方法是否是递归的也不是一个好主意。想想看,即使你能发现这个方法是递归的,那递归代码也有一千个错误。在</p>
<p>相反,在进行TDD时,提出要处理的数据集的小而好的表示形式,并编写案例以检查您正在编写的函数是否能够很好地处理它们。在</p>
<p>让我们考虑一个递归函数的例子来解析和查找树节点的总和。在</p>
<pre><code>def total(tree):
if tree == None: return 0
return total(tree.left) + total(tree.right) + tree.cargo
</code></pre>
<p>下面是一些我会考虑测试<code>functionality</code>而不是测试<code>implementation</code>函数的测试数据案例:</p>
<p><strong>确保总数正确的阳性测试</strong></p>
<ol>
<li>当我在树中有一个节点时,完全正确吗</li>
<li>当我有一个节点和两个一级子级时,总的正确性是多少</li>
<li>当我只有一个三级右孩子(左孩子不见)是完全正确的吗
.
. 在</li>
</ol>
<p><strong>然后测试一些退出条件:</strong></p>
<ol>
<li>用一个样本树初始化测试,并根据要实现的算法检查函数是否存在于预期节点上
.
. 在</li>
</ol>
<p><strong>添加一些阴性测试</strong></p>
<ol>
<li>如果树结构中存在循环,请检查是否引发异常
.
. 在</li>
</ol>
<p>等等。。。直到你学习了一些基本的组合。上两层。在</p>
<p>现在您知道要通过这些测试,您的函数必须执行<code>right</code>操作,不管递归与否。这是单元测试的目的。测试<strong>功能</strong>而不是<strong>实现的细节。</strong></p>
<p>一旦您确信您的测试是可靠的,并且通过这些测试的任何函数都是一个好函数,那么该函数是如何实现的就无关紧要了。它可能是递归的,也可能不是递归的,但是在编写单元测试时,您不应该关心</em>。在</p>