5分钟踢进TDD之门
来源:互联网 发布:单片机晶振电路的作用 编辑:程序博客网 时间:2024/05/20 03:40
作者:fbysss
msn:jameslastchina@hotmail.com
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请注明出处
关键字:TDD 测试驱动 敏捷开发
任务:简单测试一个Student类--只求简单,不求繁杂。
从需求开始;
1. 建立TestStudent类,extends TestCase
2. 建立testCreate()方法,测试创建,
- public calss StudentTest extends junit.framework.TestCase{
- public void testCreate(){
- new Student(“fbysss”);//出错,因为还没有Student类
- }
- }
3.
建立Student类,通过测试
- public class Student{
- Student(String name){
- }
- }
4.
根据需求,学生都有一个名字,进一步测试名字
- public calss StudentTest extends junit.framework.TestCase{
- public void testCreate(){
- Student student = new Student(“fbysss”);
- String name = student.getName();//出错,因为没有提供getName方法
- }
- }
5.
创建getName方法
- public class Student{
- Student(String name){
- }
- String getName(){
- return “”;//不知道该写什么,先做一个stub.
- }
- }
6.
根据需求,返回的name应该等于创建时候传入的字符串。于是,有如下测试代码:
- public calss StudentTest extends junit.framework.TestCase{
- public void testCreate(){
- Student student new Student(“fbysss”);
- String name = student.getName();
- assertEquals(“fbysss”,name);//测试不通过,因为返回值是””,不是”fbysss”
- }
- }
7.
于是,如果程序员就是个机器,很傻的想到要满足我的测试,直接目标就是让测试条变绿!修改Student.getName()方法如下。- String getName(){
- return "fbysss";
- }
这样解决了上一个问题。
8. 根据需求,再创建另外的Student,仍然可以得到正确的结果
- public calss StudentTest extends junit.framework.TestCase{
- public void testCreate(){
- Student student new Student(“fbysss”);
- String name = student.getName();
- assertEquals(“fbysss”,name);
- //测试第二个学生
- Student student new Student(“james”);
- String secondName = student.getName();
- assertEquals(“james”,secondName );//测试不通过,因为返回值是”fbysss”,不是”james”
- }
- }
9.
于是,可以知道Student的getName还需要更通用(这里重构步子大小可以根据情况而定,毕竟写测试用例的是人,不是机器)加入name成员
仅这一步还不行,索性想全了:要得到想要的结果,必须在构造函数里面保存传入的参数。
如果在以后的测试中,要求Student提供setName方法,进一步Driven创建void setName(String name)方法。
- public class Student{
- private String name;
- Student(String name){
- this.name = name;
- }
- String getName(){
- return name;
- }
- }
因为测试的代码太多,不够简洁,要求重构。
- public calss StudentTest extends junit.framework.TestCase{
- final String STUDENT_NAME_FIRST= "fbysss";
- final String STUDENT_NAME_SECOND = "james";
- public void testCreate(){
- Student student new Student(STUDENT_NAME_FIRST);
-
String name = student.getName();//删除 - assertEquals(STUDENT_NAME_FIRST,student.getName());//name使用inline重构
- //测试第二个学生
- Student student new Student(STUDENT_NAME_SECOND);
-
String secondName = student.getName();//删除 - assertEquals(STUDENT_NAME_SECOND, student.getName());
- }
- }
怎么样,简单吧,体验到被测试“驱动”的感觉了吗?
- 5分钟踢进TDD之门
- TDD实践之实用主义
- TDD
- TDD
- TDD
- TDD
- TDD开发的全过程之分析建模
- 敏捷杂谈之TDD与BDD
- CPRI之TDD开关控制字
- “TDD已死”之论战调查
- 每天学习十分钟5之学习心得
- 5分钟开启Esper之旅
- CppUnit TDD之探索swf文件头(上)
- CppUnit TDD之探索swf文件头(中)
- CppUnit TDD之探索swf文件头(下)
- TDD 实践之路 - TTCMS完全构建历程(DELPHI)
- 基于python的完全数之非TDD版本
- 基于python的完全数之TDD版本
- String.Format格式化网址
- 中缀表达式转为后缀表达式以及后缀表达式的计算
- 获取程序资源 Resources
- 聆听英特尔中国前总裁陈朝益谈5%
- System.load 和 System.loadLibrary详解
- 5分钟踢进TDD之门
- 递归拷贝所有子目录
- 一个用Spring AOP实现异常处理和记录程序执行时间的实例--邵京国
- 命令行参数解析(1)
- OpenID
- 八叉树(octree)简介(zz)
- 无法获取DataSet删除行的值的问题
- JUnit 入門(六) - 測試設備(Test fixture)
- arcsde9.2中text的存储类型问题(unicode,varchar and nvarchar)