像TDD、ATDD、BDD你们都耳熟能详,而且这些方法学冠予敏捷美名。 javascript
作为一名敏捷开发的忠实粉,下面我谈谈对于自身作主程序员在测试方面的一些了解。 前端
参考书籍 java
《 测试驱动开发的艺术》、《Junit In Action》、《验收测试驱动开发 ATDD实例讲解》、《Web敏捷开发之道》 程序员
TDD:需求分解、红->绿->重构循环、编写恰好完成需求码。 web
ATDD:在TDD编程技能之上的补充,实现用户故事,构建正确的软件而不是正确的构建软件。 spring
咱们先抄一下书籍上的测试分类,结合实践经验,后面用一个web工程示例来解释咱们如何应用上这些测试。 sql
集成测试 数据库
对象:测试多个实例化多个、并调用这些对象上的方法 编程
服务:当应用程序部署到一个servlet或者ejb容器时运行测试,应用程序可能连接到一个数据库或者连接到其余外部资源 后端
子系统:层次化的应用程序可能会有一个前端处理表示,还有一个后台业务逻辑。测试能够验证一个请求是否从前段传递到后端,而且从后端返回正确的响应。
功能测试
应用程序使用了一个框架:框架中的功能测试集中在测试框架API
应用程序有一个GUI:图形用户界面的功能测试是为了验证全部的特性均可以访问被访问并提供预期的结果。测试能够直接访问GUI,这也可能会调用其余的组件或后端程序。
应用程序由子系统构成:层次系统图按角色的不一样来划分子系统。可能有其余表示子系统、业务逻辑子系统的数据子系统。层次化带来了灵活性,而且能够经过几个不一样的前端来访问后端。每一层都会为其余层定义一个API来使用。功能测试主要是测试该层的API是否实现。
压力、性能测试
好理解,测试吞吐量、测试性能瓶颈。
验收测试
其余测试全部的超集。最终级别的测试,一般从功能测试开始、由客户或客户代理人进行。
程序员开发测试子集,方法有比较多。
单元测试
逻辑单元测试、集成单元测试、功能单元测试。一般要快速执行,不依赖与环境。
测试介绍:
一个web工程。
咱们进行应用分红
domain层领域对象。执行领域逻辑。
application层应用接口,facade接口、提供事务写操做、组织领域对象逻辑。依赖domain层
querychannel层查询通道接口,提供数据库查询、搜索引擎查询接口。不依赖领域层
(application层与querychannel层分离实现CQRS)
web层,UI、控制web请求,组织application、querychannel调用并依赖他们。
infrastructure层基础设施,网络服务、数据库服务对application的repository跟querychannel相关实现等。
单元测试:
重中之重,大部分测试在单元测试中。
工具:Junit、EasyMock、sprint-test、struts-test、jasmine
domain层:New出领域对象,测试相关逻辑方面。Repository、DomainService等使用mock实现。验证相关领域对象操做方向后数据。
application层:组织Command对象,mock相关Repository操做,验证调用逻辑。
querychanel层:组织Condition对象,mock相关DataSource操做,验证sql组织,返回Dto对象数据。
web层:springMVC使用MockMvc测试Controller逻辑。struts使用StrutsTestCase测试action逻辑。
jasmine测试javascript相关逻辑
infrastructure层:测试工具方法、服务异常状况处理。不进行访问数据库等这些测试。
集成测试:
工具:dbunit、连接测试数据库spring-test使用事务回滚操做测试、连接测试cache服务器
application层、querychannel层、infrastruct层,在集成以上测试环境下,真实的调用数据库、cache服务器等这些操做。
功能测试:
工具:jwebunit、selenium
web层:运行模拟容器。使用jwebunit、selenium等进行模拟web操做的一个功能点。例如:登陆。
压力测试:jmeter
web层,配置访问http脚本、并发线程数据、用户数、持续时间。
验收测试:(这里指程序员的测试子集)
工具:Fitnesse、selenium
web层:在fitnesse的wiki配置测试集(整合一个或多个功能测试)、准备相关数据表格。完成一个用户故事。例如:下单->支付->收货->确认收货的一个购物流程。
在工做实践,有很多测试难以编写,咱们学会用强大工具配合,并编写可测代码。让编写测试成为一种乐趣。