行为驱动开发之三,从测试驱动开发中来
作者:网络转载 发布时间:[ 2011/10/13 9:39:18 ] 推荐标签:
TDD的由来
测试驱动开发(Test Driven Development, TDD)的想法来自于极限编程(Extreme Programming,XP)。XP始于1999年,以测试为先为理念。因为缺少工具的支持,XP一开始不温不火,直到Junit问世,XP才得到广泛推广。坊间传言,Junit是Kent Beck和Eric Gamma两位大牛在飞机上无聊了写着玩儿弄出来的。到了03年,XP的测试优先进化成TDD,即:
● 每写一段代码之前,先写一个单元测试
● 在单元测试可以运行并失败后,编写代码
● 待到代码可以使之前的测试通过后,编码完成
● 在保持测试通过情况下,重构代码
ruby语言下TDD的例子:
我希望实现一个点,即用x,y初始化它的坐标,并且对异常值进行报错。测试为先:
classTC_Point < Test::Unit::TestCase
02 @@valid_points= [[1,2], [0,0]]
03 @@invalid_points= [[nil,3], [3,nil], [1, -2], [-1,2], [1.5,2], [35,5.66778]]
04 deftest_valid_point
05 @@valid_points.eachdo|point|
06 p = Point.new(point[0], point[1])
07 assert(p.row == point[0])
08 assert(p.column == point[1])
09 end
10 end
11 deftest_invalid_point
12 @@invalid_points.eachdo|point|
13 assert_raise RuntimeErrordo
14 p = Point.new(point[0], point[1])
15 end
16 end
17 end
18 end
该代码可以运行后,再为Point这个类写实现:
classPoint
02 attr_reader:row,:column
03 definitialize(row, column)
04 if!row.is_a?(Integer)or!column.is_a?(Integer)
05 raise"row #{row} and column #{column} must be integer"
06 end
07 ifrow<0orcolumn<0
08 raise"row #{row} and column #{column} must be >= 0"
09 end
10 @row= row
11 @column= column
12 end
13 end
此时,运行测试。通过测试。然后,对Point这段代码进行重构。重构,即保持原有代码行为不变,改善代码的可读性,独立性等。只要改善后的Point类可以通过测试,即,重构没有影响到原有功能。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11