- 浏览: 58166 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
jijiuzhou:
...
spring 第二天 访问资源文件 以及各种乱七八糟的错误信息以及解决办法 -
金米线:
感觉学习理解的不够深入,准备在重新学习一遍
测试驱动开发 我的现金系统 -
锅巴49:
Outer outer=new Outer();
Outer. ...
java 调用内部类
本文以我的现金系统为例来介绍如何用测试驱动开发。
主要以货币汇率的不同转换来介绍。
FM:一美元=2法郎
1也就是说5美元+10法郎=10美元
这时候 我们需要列一个计划清单,来标识工作顺序。这样一个一个解决问题,工作在快速完成当中
我们要改变开发过程中首先建立对象的模式,不是先建立对象而是先建立测试。首先时间最简单的乘法。
public void testChengfa(){ Dollar five = new Dollar(5); five.times(2); assertEquals(10,five.amount); }
为什么这么做,我们要知道 5美元*2=10美元,是为了响应上面的公式,我们要小步一步步实现。
package com.mixian.first_two; public class Dollar { int amount; public Dollar(int amount) { this.amount = amount; } public void times(int time) { amount*=time; //amount = this.amount*time; } }
一步一步实现 amount=10;amount=5*2; amount=amount*time;amount*=time;
2:与测试开发驱动相对的是体系结构驱动(为了获得整洁可用的代码)
我们对dollar操作的时候,这个对象变化了
增加新的测试 public void testChengfa(){ Dollar five = new Dollar(5); five.times(2); assertEquals(10,five.amount); five.times(3); assertEquals(15,five.amount); }
结果是junit.framework.AssertionFailedError: expected:<15> but was:<30>
3:数值对象:就是可以将对象当做数值来用,要求数值对象的实例变量值在构造函数中被指定,以后在也不可以发生变化。好处两个五美元对象,不会因为一个对象而改变另一个对象,如果需要7美元就需要重新创建一个
4:测试相等性
public void testEquals(){
assertTrue(new Dollar(5).equals(new Dollar(5)));
}
public boolean equals(Object object){
Dollar dollar = (Dollar)object;
return amount==dollar.amount;
}
5:让dollar对象之间进行比较
public void testChengfa(){
Dollar five = new Dollar(5);
/* 为什么不是10
five.times(2);
assertEquals(10,five.amount);
*/
//如果我们从times返回一个新对象的时候,那么我就可以对原来的dollar对象进行操作
//Dollar product = five.times(2);
//assertEquals(10,product.amount);
assertEquals(new Dollar(10),five.times(2));
//product = five.times(3);
//assertEquals(15,product.amount);
assertEquals(new Dollar(15),five.times(3));
//five.times(3);
//assertEquals(15,five.amount);
}
小结:以上已经完成了美元对象的乘法运算,以及对象之间的判等,下面要实现法郎的乘法与判等,才能为两个对象之间的混合操作打基础
1:package com.mixian.first_two;
public class Fancs {
private int amount;
Fancs(int amount){
this.amount = amount;
}
public Fancs times(int time){
return new Fancs(amount*time);
}
public boolean equals(Object object){
Fancs fancs = (Fancs)object;
return amount==fancs.amount;
}
}
法郎对象的操作 记得不要忘复写equals方法
2:现在的情况下 发现两个对象中有很多相同的类,所以我们要找出一个他们的父类。
将变量上移,将equals 中的类替换成money
package com.mixian.first_two; public class Dollar extends Money{ //private int amount; public Dollar(int amount) { super.amount = amount; //System.out.println(this.amount); } public Dollar times(int time) { //amount*=time; //amount = this.amount*time; //System.out.println(amount*time); return new Dollar(amount*time); } public boolean equals(Object object){ Money money = (Money)object; return amount==money.amount; } } package com.mixian.first_two; public class Money { protected int amount; }
然后将equals方法移到Money类中
这时候增加断言
:assertFalse(new Dollar(5).equals(new Fancs(5)));
返现他们是相等的对象,这样问题就出来了,我们需要表示出两个对象的不同。
也就是说:要判断两个类的数值相等而且要是相同的类
amount==money.amount && getClass()==money.getClass();
测试通过成功了。
3:现在要动手出去times()方法,这样才可以统一计算
在Money类中引入一个返回dollar对象的工厂方法
Money four = Money.dollar(4);
//assert(new Dollar(4).equals(four));
assertEquals(new Dollar(10),four.times(2));
assertEquals(new Dollar(15),four.times(3));
public abstract class Money {
protected int amount;
abstract Object times(int i) ;
因为在Money类中没有对times方法进行实现,所以可以将times方法定义为抽象的方法
4:更改测试,建立静态的方法
assertEquals(Money.dollar(10),four.times(2));
assertEquals(Money.dollar(15),four.times(3));
static Money dollar(int amount){
return new Dollar(amount);
}
static Money fancs(int amount){
return new Fancs(amount);
}
5:根据字符串的不同创建不同的方法
发表评论
-
spring ioc
2011-10-08 14:28 543待补 -
spring aop
2011-10-08 14:27 638待补 -
eclipse内部启动tomcat,eclipse外部启动tomcat,去掉8080端口访问
2011-09-22 11:21 49921 : eclipse web 工 ... -
测试驱动开发实战之各个击破
2010-12-13 12:48 734项目测试: import org.junit.Before; ... -
tomcat配置https
2010-11-15 13:34 997参考文档Keytool使用指南:http://java.sun ... -
远程调试java
2010-11-07 16:29 770需求: 我是在eclipse开发工程,通过tomca ... -
基础乱七八糟命令
2010-10-11 18:38 698命令行删除文件:del+文件名称 java中 fi ... -
测试驱动开发 java基础
2010-10-11 18:37 2883public class CourseSessionTest ... -
测试驱动开发
2010-10-09 11:03 9161安装java ant 2写helloworld clas ... -
spring 第二天 访问资源文件 以及各种乱七八糟的错误信息以及解决办法
2010-09-08 22:13 1174我在用spring访问资源文件的时候出错了 urlresou ... -
spring 40天全程跟踪 第一天spring发送邮件
2010-08-19 16:47 1192com.sun.mail.smtp.SMTPSendFaile ... -
spring 40天全程跟踪 第一天spring依赖注入控制反转
2010-08-19 14:19 724以前都是用MyEclipse集成开发,开发速度快,但是很多时候 ... -
java 对文件的操作
2010-08-18 20:39 721java 遍历文件夹文件: package com.mixi ... -
java list arraylist map 集合
2010-08-17 23:41 1435package com.mixian.list; imp ... -
java 线程安全 和同步方法
2010-08-17 21:32 636package com.mixian.thread; p ... -
java 调用内部类
2010-08-15 10:37 5032调用内部类的某个方法 ... -
链接支付宝查询出错
2010-08-12 16:18 888在去支付宝查询用户数据的时候报错: java.lang.Ru ... -
java log4j 错误日志
2010-08-12 10:06 928import org.apache.commons.loggi ... -
java 反射机制原理及实例
2010-08-11 23:26 1166能够分析类能力的程序成为反射。 xx.getClass(). ... -
java 一些基本技巧
2010-08-10 07:37 6121 数组 数组在初始化的时候就需要规定其大小,不 ...
相关推荐
测试驱动开发及开发实践.pdf 测试驱动开发及开发实践.pdf
测试驱动开发.pdf测试驱动开发.pdf
测试驱动开发 测试驱动开发 测试驱动开发 测试驱动开发
测试驱动开发电子书测试驱动开发电子书测试驱动开发电子书测试驱动开发电子书
要使测试驱动开发在软件行业中得以繁荣兴盛,需要一些条件,《C#测试驱动开发》从讨论这些条件开始。软件开发发展到今天,有其历史和特定的条件,理解这些很重要。避免重复过去的错误也很重要。在自己当前的开发实践...
java 测试驱动开发,
测试驱动开发实践介绍ppt.ppt 测试驱动开发实践介绍ppt.ppt
全书内容循序渐进,先侧重基础内容,讨论测试驱动开发和验收,然后进入动手实践部分,逐一讲解如何对各种技术应用TDD,最后介绍基于验收测试驱动的测试先行的方式构建完整的系统。本书面向各个层次的Java程序员。...
测试驱动开发-实例1 Test-Driven+Development+By+Example-测试驱动开发
《Java测试驱动开发》介绍如何将各种TDDzui佳实践应用于Java开发,主要内容包括:用Java语言进行TDD会用到的各种工具和框架,所需环境搭建;通过实际应用程序,展示TDD优点及开发中应注意的主要问题;TDD是如何通过...
测试驱动开发PPT,要进行梳理,对现在工作有帮助
C#测试驱动开发(中文清晰版) 第Ⅰ部分 入门 第 1 章 通向测试驱动开发之路 第 2 章 单元测试简介 第 3 章 重构速览 第 4 章 测试驱动开发:以测试为指南 第 5 章 模拟外部资源 第Ⅱ部分 将基础知识...
Kent Beck的经典教程 测试驱动开发
python测试驱动开发
测试驱动开发(TDD)以测试作为开发过程的中心,它要求在编写任何产晶代码之前, 首先编写用于定义产品代码行为的测试,而编写的产品代码又要以使测试通过为目标。测试驱 动开发要求测试可以完全自动化地运行,在对...
测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量。本文从开发人员使用的角度,介绍了 TDD 优势、原理、过程、原则、测试技术、Tips 等方面。 背景 一个...
TDD的概念与模式第二部分 针对特定技术应用TDD第5章 测试驱动Web组件第6章 测试驱动数据访问第7章 测试驱动不可预测功能第8章 测试驱动Swing代码第三部分 基于ATDD构建产品第9章 解析验收测试驱动开发第10章 ...
测试驱动开发 英文版 非常经典的一本好书。
测试驱动开发 TDD ,将读者带入XP极限编程的神奇世界!