13.4. 正面测试 (Testing for success) 13.5. 负面测试 (Testing for failure) 测试有效输入还不够,还必需测试无效输入,并且要按预期失败形式执行 13.6. 完备性检测 (Testing for sanity) 测试的一条基本规则:每一个测试用例只回答一个问题。 另外一个基本规则:每一个测试用例必须能够与其余测试用例隔离工做,每一个测试用例是一个“孤岛”,下降测试间的藕合程序员
当全部测试都经过了,中止编程。正则表达式
不要怕麻烦,今天的单元测试就是明天的回归测试 (regression test) 15.2. 应对需求变化 全面的单元测试意味着没必要依赖于程序员的一面之词 15.3. 重构编程
<pre> romanNumeralPattern = re.compile(''' ^ # beginning of string M{0,4} # thousands - 0 to 4 M's (CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's), # or 500-800 (D, followed by 0 to 3 C's) (XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's), # or 50-80 (L, followed by 0 to 3 X's) (IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's), # or 5-8 (V, followed by 0 to 3 I's) $ # end of string ''', re.VERBOSE) </pre>性能
15.4. 后记单元测试
15.5. 小结 单元测试是一个强大的概念,使用得当的话既能够减小维护成本又能够增长长期项目的灵活性。一样重要的是要意识到单元测试并非“灵丹妙药”,也不是“银弹”。编写好的测试用例很困难,保持其更新更须要磨练。单元测试不是其它形式测试的替代品,好比说功能性测试、集成测试以及可用性测试。但它切实可行且功效明显,一旦相识,你会反问为何以往没有应用它。测试