擅长:python、mysql、java
<p>通常在单元测试中,我们测试的对象是单个函数。也就是说,一个函数会产生多个测试。在阅读测试代码时,将单个单元的测试以某种方式组合在一起是很有用的(这也允许我们运行特定功能的所有测试),因此我们有两个选择:</p>
<ol>
<li>将每个功能的所有测试放在专用模块中</li>
<li>将每个函数的所有测试放在一个类中</li>
</ol>
<p>在第一种方法中,我们仍然有兴趣以某种方式对与源模块(例如<code>utils.py</code>)相关的所有测试进行分组。现在,由于我们已经使用模块对<em>函数</em>的测试进行分组,这意味着我们应该使用<em>包</em>对源模块的测试进行分组。在</p>
<p>结果是一个源<em>函数</em>映射到一个测试<em>模块</em>,一个源<em>模块</em>映射到一个测试<em>包</em>。在</p>
<p>在第二种方法中,我们将使用一个源函数映射到一个测试类(例如<code>my_function()</code>->;<code>TestMyFunction</code>),而一个源模块映射到一个测试模块(例如<code>utils.py</code>->;<code>test_utils.py</code>)。在</p>
<p>这可能取决于具体情况,但第二种方法,即对您正在测试的每个函数进行一类测试,对我来说似乎更清楚。此外,如果我们正在测试source<em>classes</em>/方法,那么我们可以简单地使用测试类的继承层次结构,并且仍然保留一个源模块->一个测试模块映射。在</p>
<p>最后,与包含多个函数测试的平面文件相比,这两种方法的另一个好处是,在类/模块已经确定要测试的函数的情况下,可以为实际测试使用更好的名称,例如<code>test_does_x</code>和{<cd7>},而不是{<cd8>}和{<cd9>}。在</p>