这次TDD训练营,终于有学员提出了这个问题:“我之前在某个Session中,听说TDD分为ATDD和UTDD,咱们现在做的是UTDD,后面会涉及ATDD?”
先解释一下,ATDD表示Acceptance Test-Driven Development,UTDD表示Unit Test-Driven Development。一个是说验收测试驱开发,一个是单元测试驱动开发。
不知道该学员参加的那个Session,讲师有没有讲清楚这两个的区别,亦或讲师讲清楚了,自己没有吸收。从他的提问来看,感觉是没有理解透彻的。
首先从ParkingLot这个案例来看,如果硬要区分ATDD和UTDD,其实是ATDD。关于这两个的区别,我会在另一个专栏里去写。
验收和单元这两个词在每个团队,甚至是每个人脑海中的Scope是不一样的。单元可以是一个方法、一个类、一个层、一个独立进程的服务等等,验收可以是真正的客户验收、面向契约的验收、RESTFul Service API的验收、去除硬件层的逻辑验收等等。跟这两个词有类似问题的是集成,集成可以是两个方法、两个类、两个层、两个独立进程服务等等。
所以当你说单元测试的时候,你脑海里有一个假设,别人不一定能理解你的假设,在讨论这个的时候先对齐一下Scope。
在这里我先澄清一个误区:
你在TDD的时候,不是使用了单元测试框架编写、跑起来很快、功能看起来简单、只有单个服务的时候,你就一定是在UTDD。区分ATDD和UTDD跟工具本身无关,而是你的测试所站的视角(业务需求 or 技术实现)。我也可以用jUnit框架编写API验收测试,亦或是E2E测试。