我不确定“先测试”是如何运作的,我想听听关于何时以及为什么会采用这种方法的争论。
我听说通常建议在编写一行实现之前先编写测试和模拟内容。但是,我不禁认为它并不适合所有情况。
例如,假设我正在制作一个原型(prototype),但我不确定一切将如何运作。因此,我只是开始寻找我认为需要的每个步骤的示例,并将它们放入我的代码中。最后我得到了我的理论的证明并且没花那么长时间。这本质上是“我的测试”。这不是单元测试,而是测试(很可能是控制台应用程序)。
这几乎就是我的工作方式。我思考我想做什么,并努力去做。如果它有效,那么我最终会回去编写单元测试,以便我可以捕获回归。这与您“应该做的”有什么不同吗?
总体规则是:先做风险最大的事情。
首先做测试用例,隐含地争论编码中风险最大的部分是对正在创建的对象的接口(interface)和行为的错误传达和误解。
对于许多项目来说,这很可能是正确的,TDD 在这些情况下非常合适。
然而,在许多项目中情况并非如此,在这些情况下应用 TDD 是一个糟糕的选择。
如果您面临的最大风险是可用性,请停止对单元测试胡思乱想并进行一些 UI 原型(prototype)设计。
如果您的最大风险是性能,请先做一些性能原型(prototype),不要担心接口(interface)。
这个列表还在继续。
先做有风险的项目有很多好处:
在许多资源被浪费之前,不可避免地注定要失败的项目会提前结束。
陷入困境但可以挽救的项目尽早得到项目管理的关注,因为它可以起到一定的作用。
如果项目失败的风险较低,您组织的业务部门就会对项目给予更高的评价;它被不必要地提前取消的可能性较小。