你是否遵循正式的模板,还是使用笔和纸/记事本?
我正在寻找一些方法,让其他程序员/QA知道应该实现哪些测试(如果有什么被忽略了,那么更容易发现)。
我认为使用模板与使用TDD不太相符。我假设你已经读过Kent Beck的《测试驱动开发:实例》一书。如果没有,请务必阅读。
但是,总体思路很简单。当我们开始一个类时,我们会对该类的职责有一个大致的了解。这是我们使用的步骤:
对类的职责有一个大致的了解,并使用该信息来命名类。
为该类创建一个测试用例。
如果您从具体信息开始了解类内部的单元,只需在类内编写这些存根并为这些存根编写测试用例。最初,所有这些方法都将失败,并且大多数方法的签名将更改。这就是整个思路。
在大多数情况下,开发人员可能没有那么多信息。在这种情况下,在第一个测试中编写代码是可以的。一旦测试通过,然后将逻辑迁移到类中。
所以我的观点是,TDD的整个重点是使开发过程更加有机。随着对其应该执行的操作的了解而增长。拥有正式的模板或书面记录可能不会有所帮助。
唯一我能想到的事情,就是在每个迭代之前与开发人员坐下来,并对每个组件类及其职责制定相当详细的想法(我们仅使用此讨论来最终确定公共API)。TDD 不是你要找的方法论 ;-)
way to let other programmers/QAs know what tests should be implemented
这个声明意味着你正在进行测试,但是TDD本身是由需求驱动并产生特性的 - 它也产生了一套测试用例,这只是一个附带的(但非常强大)附属品,它恰好导致了回归测试套件。
虽然TDD利用“测试”来推动代码开发,但您不需要事先指定测试。即使您这样做(有时候这样做对于“思考”是有帮助的),您的程序员也可能不需要编写所有测试以产生所需的行为。实际上,在TDD中,当所有测试都通过时,鼓励您停止工作 - 您不需要继续编写测试,只是发现它们已经通过;这类似于无谓的工作。
TDD的另一个副作用是拥有(并持续运行)回归测试套件。如果在以后的某个日期发现了错误,仅凭测试套件就可以更容易地编写另一个测试,该测试用于演示具有失败测试的错误。一旦修复了错误,测试应该通过 - 连同套件中的所有其他测试一起。
你不能承诺使用TDD并让其他人进行单元测试。这个要求强烈表明你没有理解TDD范例。
根据我的(尽管相对较新的)经验:
TDD不是QA方法;它是一种开发方式。整个想法是单元测试指导开发过程。因此,你真的不能让其他人为你做单元测试。
我通常从设计类开始,使用简单的UML类图。我尽量不让图表过于详细,以便可以对其运行测试(例如为每个方法指定参数和返回类型,并知道该方法的行为如何影响对象状态)。
然后,我编写单元测试。一般来说,当涉及到自动化测试时,您应该为类中定义的每个方法拥有1个测试方法。就惯例而言,如果我的类中有一个名为myMethod
的方法,则我的单元测试方法将被称为testMyMethod
。
我使用我所知道的关于方法预期行为的知识编写单元测试,然后编写该方法并检查它是否通过了单元测试。