`

测试驱动开发 我的现金系统

    博客分类:
  • 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:根据字符串的不同创建不同的方法

 

 

 

 

 

分享到:
评论
1 楼 金米线 2010-10-25  
感觉学习理解的不够深入,准备在重新学习一遍

相关推荐

    行为驱动开发

    BDD起源于测试驱动开发(TDD),但它更加注重设计过程而非仅仅测试。在BDD中,系统的行为被清晰地定义,这些行为描述随后转化为测试用例,确保实现的代码符合设计预期。BDD的一个关键组成部分是用户故事,这是一种...

    BDD行为驱动开发介绍.pdf

    行为驱动开发(BDD)是一种以行为为中心的设计方法论,旨在通过建立共享的、精确的词汇表,确保开发团队和利益相关者之间的沟通清晰有效,从而减少误解导致的开发错误。BDD的核心在于促进业务需求的明确表达,使得...

    基于Web的银行核心系统自动化测试研究与应用.pdf

    测试工程师负责设计每个交易的具体测试案例,并通过该框架驱动执行所有案例、分析案例执行结果。 三、典型场景及优化成效 自动化测试可以应用于银行核心系统的多个方面,如交易系统、账户管理系统、支付系统等。...

    Delphi现金付款登记采集系统源代码..rar

    这个名为"Delphi现金付款登记采集系统源代码"的项目,显然是一款使用Delphi构建的应用程序,专注于现金支付记录的管理和收集。通过分析源代码,我们可以深入理解Delphi编程的多个关键知识点。 1. **Delphi IDE**:...

    基于VB的家庭财务管理系统的开发论文

    ### 基于VB的家庭财务管理系统的开发论文 #### 一、引言 ##### 1.1 开发背景及研究意义 随着中国经济的快速发展,人们的生活水平显著提高,家庭财务信息也随之变得越来越复杂。传统的手工记账和记忆式理财方式已...

    pos系统的需求功能分析建模

    3. 测试驱动开发:编写测试用例,确保每个功能的正确性和稳定性。 4. 用户反馈:在开发过程中持续收集用户反馈,优化系统功能。 总结,POS系统的需求功能分析建模涵盖了从理解业务需求到具体实现的全过程,包括...

    银行ATM机系统

    开发完成后,对ATM机系统进行详尽的测试,包括功能测试、压力测试、安全性测试等,以确保系统稳定可靠。同时,通过性能分析和优化,提高系统响应速度,降低资源消耗。 六、维护与升级 银行ATM机系统上线后,需定期...

    VB 开发VB停车场管理系统设计(源代码+系统+开题报告).rar

    3. 测试调试:在开发过程中,持续进行单元测试和集成测试,确保各功能模块的正确性。 4. 系统优化:根据实际使用情况,不断优化系统性能,提升用户体验。 总结,VB停车场管理系统是VB技术在实际应用中的成功案例,...

    VB 编写收银系统

    最后,为了确保系统的稳定运行,需要进行严格的测试,包括单元测试、集成测试和压力测试,以找出潜在的错误和性能瓶颈。 总的来说,使用VB编写收银系统是一项集技术与实践于一体的挑战。通过合理的设计和严谨的开发...

    基于Java的快餐店商家收银系统研究.pdf

    系统完成开发后,通过软件和硬件环境测试来验证系统的正确性和可行性。 ### 关键技术介绍 - **IDEA集成环境**:提供了代码审查、Java集成等功能,是当前Java开发中广泛使用的集成开发环境。 - **VSCode的代码编辑器...

    windows窗体的酒店管理系统

    4. **测试**:对系统进行全面测试,确保其稳定性和准确性。 5. **部署**:将系统安装到酒店服务器或电脑上,进行实际运行。 对于初学者而言,开发酒店管理系统是一个极好的实践项目,既能掌握C#编程基础,又能了解...

    餐饮管理系统(C#开发实战宝典)

    9. **测试与部署**:完成系统开发后,需进行单元测试、集成测试和压力测试,确保系统稳定可靠。同时,了解IIS服务器配置、安装部署等步骤,以实现系统的实际应用。 通过《餐饮管理系统(C#开发实战宝典)》的学习,...

    储蓄管理信息系统(程序)

    VB是一种由微软公司推出的事件驱动编程语言,以其易学易用、开发效率高而广受程序员喜爱。在这个系统中,开发者利用VB的图形用户界面(GUI)组件和编程逻辑,构建了一个用户友好的储蓄业务操作平台。 管理系统的...

    LabVIEW超市收银系统

    LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国国家仪器公司(NI)开发的一款图形化编程环境,广泛应用于数据采集、测试测量、控制系统等多个领域。本篇将深入探讨如何利用LabVIEW构建一...

    贸易信息管理系统vb

    为了保证系统的稳定性和性能,开发者还需要考虑代码优化、错误处理和系统测试。 通过深入理解和运用这些知识点,可以构建出一个高效、实用的贸易信息管理系统,帮助贸易企业提升运营效率,降低成本,增强市场竞争力...

    客房管理系统

    解决这些问题需要深入理解和实践C++语言特性,同时具备良好的软件工程实践,如代码规范、测试驱动开发和持续集成。 通过学习和理解这个客房管理系统的源代码,开发者不仅可以提升C++编程技能,还能了解到如何将C++...

    dephi和数据库开发的宾馆客房管理系统(带有开发文档,PPT)

    德phi,全名Embarcadero Delphi...综上所述,这个宾馆客房管理系统项目涵盖了Delphi编程、数据库连接与管理、用户界面设计以及软件测试等多个IT领域的知识点,对于学习和理解Delphi开发数据库应用具有很高的参考价值。

    VB酒店管理系统设计

    VB(Visual Basic)是一种由微软公司开发的事件驱动编程语言,广泛应用于构建用户界面友好的应用程序,包括酒店管理系统。在这个系统的设计中,VB提供了丰富的控件和工具,使得开发者能够轻松地创建出符合业务需求的...

    停车收费管理系统(VB access数据库版本)

    VB是一种流行的事件驱动编程环境,常用于开发Windows应用程序。它的用户界面友好,代码编写简洁,使得开发人员能够快速构建功能丰富的应用。在停车收费管理系统中,VB可以用来设计交互式的图形用户界面(GUI),包括...

    VB停车场管理系统设计(源代码+系统+开题报告).zip

    《VB停车场管理系统设计》是一个基于Visual Basic(VB)开发的软件项目,旨在提供一套完整的停车场管理解决方案。这个系统包括源代码、实际运行的系统以及开题报告,为学习者提供了全面的学习材料,不仅可以深入理解...

Global site tag (gtag.js) - Google Analytics