我对测试驱动开发(TDD)知之甚少,但我总是听说我需要用一些测试用例开始开发。然后,我需要使用最简单的解决方案来完成此测试。然后创建更多测试以使我的测试再次失败......
但问题是:何时停止创建新测试?当我知道我的申请符合要求时?
答案 0 :(得分:9)
无耻地将Kent Beck的回答复制到this question。
我得到的代码付费有效,而不是 对于测试,所以我的理念是测试 尽可能少地达到给定的 信心水平(我怀疑这一点 相比之下,信心水平很高 符合行业标准,但那可能 只是傲慢)。如果我通常不 犯了一个错误(比如设置 构造函数中的错误变量), 我不测试它。我确实倾向于做 测试错误的感觉,所以我是额外的 当我有逻辑时要小心 复杂的条件。编码时 在团队中,我将策略修改为 仔细测试我们的代码, 总的来说,往往会出错。
不同的人会有所不同 基于此的测试策略 哲学,但这似乎是合理的 给我不成熟的状态 了解测试如何最好 适合编码的内循环。十 或者从现在开始二十年我们很可能 有一个更普遍的理论 测试写,不测试 写,以及如何区分。 与此同时,实验似乎 按顺序。
答案 1 :(得分:2)
Code coverage工具可以提供有关您的代码测试结果的有用信息。这些工具将识别您的测试尚未执行的代码路径。
答案 2 :(得分:2)
在TDD中,当您停止编写代码时(或者在编写最后一个代码之前稍微稍微编写代码),您将停止编写测试,除非(如上所述)您的代码覆盖率太低。
答案 3 :(得分:2)
如果你按照测试驱动开发的那样,你有一个5步循环:
(来源:wikimedia.org)
由于一直运行所有测试都非常耗时,因此您可以将大多数这些平凡的任务委派给持续集成服务器,该服务器将以预定义的时间间隔为您完成这些任务。这并不意味着您在提交代码之前不必运行测试。您仍然需要为正在修复的系统部分运行测试,如果系统运行较大,则所有单元测试都会适得其反。 CI服务器会告知您任何故障,您需要在修复您破坏的代码之前为所有同事购买饮料;)
答案 4 :(得分:1)
如果没有更多功能要添加到代码中,则会停止编写测试。可能还有一些额外的边缘情况需要确保覆盖,但除此之外,当您没有更多的代码可以执行时,您没有更多的TDD测试要编写(接受和QA测试是一个不同的故事)。
答案 5 :(得分:0)
您可能会发现某些区域难以测试,例如gui和数据访问,但除了您编写测试之外,直到达到目标为止。
答案 6 :(得分:0)
在理想的世界里,我会遵循极限编程实践(不仅仅是TDD),我的客户应该为我提供一些自动功能测试。当这样的测试变为绿色时,我停止编写测试并转到我的客户要求进行一些未通过的功能测试(因为测试是规范,如果我的客户没有向我提供失败的测试,我将不知道该怎么做)
我可以用另一种方式来解释,针对一个更加真实的世界。在XP法国,我们定期组织TDD Dojo(每周一次)。您可以致电Taht TDD培训课程。在那里我们用一些玩具问题练习TDD。这样做的想法是提出失败的测试,然后编写代码使其通过。 永远不建议无编码的测试。
如果提出的测试在没有任何代码的情况下变为绿色,则应向其他人支付啤酒费。因此,这是一种了解停止测试时间的方法:当您无法再编写失败的测试时,您已完成。 (无论如何,饮酒后的编码是不好的做法)。