单元测试框架的开发流程

简介

单元测试可以更快地发现代码中的错误,因此各个编程语言都拥有了专门的单元测试框架。本文按照一般的开发流程来讨论单元测试框架,即需求分析、设计实现,应用模型等等,希望可以提取单元测试的共性,为理解不同的测试框架提供支持。

需求分析

从单元测试的机制可以发现一部分隐藏需求,总结如下:

  • 独立测试:针对一个软件单元。
  • 用例组织:可以选择执行测试。
  • 自动执行测试用例:可以重复执行。
  • 自动验证测试结果:可以帮助排错过程。

满足以上几点,单元测试甚至可以作为一个可以执行的规格说明和文档。

设计实现

现有的单元测试一般由一个软件框架支持,提供对需求的基本支持,以gtest为例:

  • 独立测试:与待测单元单独形成一个执行文件,并在适当的时候完成测试场景的设置与拆除。
  • 用例组织:提供三级结构:环境、用例、用例对象
  • 自动执行:可以通过环境变量、命令行等等输入测试用例的名字,支持正则表达式。
  • 自动验证:提供一些原语,例如EXPECT_EQ等。这些原语会提供一些信息,例如是否成功,在那一行上失败,额外的信息提示等等。

测试框架的序列图如上,其中Fixture是需要用户定制的测试场景,最简单的情况就是场景中只有待测系统SUT,而且不需要设置,例如测试一个函数时的情况。

应用

软件框架只有定制以后,才能发挥作用。对于不同应用场景的定制,仍然遵循一般的软件原则,例如模块化,DRY(不要重复自己),开闭原则(对修改封闭,对扩展开放)等等。需要强调的是:

  • 简单测试:测试本身的代码必须简单,例如无分支语句,否则还要写测试代码的测试。
  • 帮助排错:测试失败之后,要提供帮助排错的信息;测试目的尽可能简单,使得失败原因一目了然。
  • 测试场景:
    •   设置独立的测试场景,可能会有性能问题,需要考虑一些针对性的方案。
    •   为了解决待测系统的依赖性,需要设置测试替身,同时也能完成一些对象交互的验证工作。
  • 可测试性设计:方便设置测试替身,尽可能减少不可测代码。

结语

开发单元测试框架仍然需要遵守一般的开发规范,因此从框架规范中整理出框架背后的需求、设计和实现的一些内容,对于理解和执行单元测试,可以提供额外的帮助。

参照

[1] Gerard Meszaros,XUnit test patterns : refactoring test code,Pearson Education, Inc,  2007

[2] Gtest, https://code.google.com/p/googletest/wiki/V1_7_Documentation

[3] Gtest, http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

时间: 2024-10-09 22:35:03

单元测试框架的开发流程的相关文章

SSH框架的开发流程

最近一段时间在使用SSH框架开发一个系统,对SSH框架又重新学习一遍.发现之前学的一些东西都忘记了,而且对很多知识点都理解的不是很透彻.最近在学习的过程中,又对一些知识点重新整理了下,但是还是比较凌乱,等项目完结后,我会再整体把开发流程梳理一遍.今天只是想跟大家分享一下大概的一个流程. 1.首先把需要的jar包都准备好,大概有86个包. 2.对于一个好的项目应该有一个非常好的结构. --src ----domain ----dao ----controller 2.根据你的数据库表写你的doma

使用.NET MVC框架项目开发流程(项目开发流程)

MVC项目开发流程 整理需求,进行需求分析.项目设计. 整理数据项,建数据库做前期准备,并整理字典. 建立所需数据库表和视图和模型. 页面实现其初步功能(跳过逻辑后台代码),只是实现页面之间的跳转以及展示(预览审核使用). .............................................................................................................................. 审核通过……开始写数据

纯SSH框架WEB开发流程

一.搭建框架,写好配置文件 二.建数据库 三.写dao,service接口以及实现类 四.写实体类entity,Hibernate映射文件xxxx.hbm.xml并在applicationContext.xml中配置该映射文件扫描<property name="mappingResources">            <list><value>com/fhsy/entity/Users.hbm.xml</value>....... &l

使用Rss框架PHP开发流程

先在Navicat建好数据库,然后在项目文件夹model下建PHP.web文件,然后引入include_once (ROOT . '/library_Easy/mysqlhelper.php'); <?php // include_once (ROOT . '/library_Easy/mysqlhelper.php');//固定写法 class MessageList extends MySqlHelper { public function __construct() { parent::_

只需12步带你玩转Django1.11框架(框架开发流程简述)

上一篇文章讲述了Django框架的基本执行流程,这篇文章我将为大家简单描述一下Django框架的基本开发流程. 本文章中基于ubuntu16.0.4系统中进行调试. 这里提一下,Django框架中setting.py文件为总配置文件,大家没事别轻易修改哦. 1.  创建虚拟环境,此步骤需要联网 mkvirtualenv 虚拟环境名 -p python3 2.  安装Django框架 pip install django 3.  进入虚拟环境 workon 虚拟环境名 4.  创建工程项目文件 d

开发流程

一个完整的开发流程应该有这四步:分析->设计->编码->测试.很多开发团队往往只有编码这边,弱化了其他步骤,他们拿到需求就开始写代码, 写着写着发现有问题,要么是遇到一个难点解决不了,要么是发现要返回修改以前写过的代码, 要么是发现有大量的重复代码,又不知道怎么封装,只能将错就错.做好了分析和设计编码时就不会有这么多问题, 做好了测试产品bug就少,产品质量才高. 下面我分别详细讲解一下这四步. 分析 分析的时候,我们要分析需求和难点. 分析需求的方法是做需求陈述处理,前面我提到过, 要

搭建前端的开发环境和前端开发流程总结

一.搭建前端的开发环境 1.代码编辑工具:sublime/WebStorm/HBuilder. 2.断点调试工具:Firebug. 3.版本管理工具:Git(本人建议使用git,至于原因大家可以看看相关blog),安装完成后我们就可以从github上clone一些项目. 4.代码合并和混淆工具:webpack (Webpack具有Grunt.Gulp对于静态资源自动化构建的能力,同时兼容AMD与CMD的模块加载规范). 4.开发调试工具:NodeJs.很多非常有用的工具都是基于NodeJs的,我

Struts 2 Spring Hibernate三大框架的执行流程以及原理

转:http://www.cnblogs.com/System-out-println/p/5974113.html Struts2框架 一.简介 Struts2是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架.它基于当年的WebWork和XWork框架,继承其优点,同时做了相当的改进. 1.Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程. 2.使用OGNL进行参数传递.OGNL提供了在Struts2里

软件项目开发流程

软件开发流程(Software development process) 首先 看一下基本软件项目开发流程图 其中 1.需求分析: 通过对客户业务的了解和与客户对流程的讨论对需求进行基本建模,最终形成需求规格说明书. 2.总体设计: 通过分析需求信息,对系统的外部条件及内部业务需求进行抽象建模,最终形成概要设计说明文档. 3.详细设计: 此部分在对需求和概要设计的基础上进行系统的详细设计(也包含部分代码说明). 4.开发编程: 对系统进行代码编写. 5.测试分析与系统整合: 对所有功能模块进行模