20145103JAVA第二次实验报告
实验二 Java面向对象程序设计
实验内容
1.初步掌握单元测试和TDD
2.理解并掌握面向对象三要素:封装、继承、多态
3.初步掌握UML建模
4.熟悉S.O.L.I.D原则
5.了解设计模式
实验步骤
(一)单元测试
(1) 三种代码:当用程序解决问题时,要写三种码:伪代码、产品代码、测试代码。
需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。
(2)实现一个百分制转五分制: 如果成绩小于60,转成“不及格” 如果成绩在60与70之间,转成“及格” 如果成绩在70与80之间,转成“中等” 如果成绩在80与90之间,转成“良好” 如果成绩在90与100之间,转成“优秀” 其他,转成“错误”
(3)先写伪代码,伪代码与具体编程语言无关,可以使用与编程语法无关的语句(最好英语),有了伪代码后,用编程语言翻译伪代码,就可以得到产品代码,截图如下:

(4)建一个XXXXTest的类,针对MyUtil类,写一个MyUtilTest.java的测试模块,这里我们设计了一个测试用例(Test Case),测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。这里我们的测试输入是“50”,预期结果是“不及格”。

运行结果如下,测试结果符合预期,截图如下:

(5)只有一组输入的测试是不充分的,我们把一般情况都测试一下,代码如下:

结果如下:

(6)我们不能只测试正常情况,下面看看异常情况如何,比如输入为负分或大于100的成绩,代码如下:

结果如下:

·运行程序发现负分时与期望不一致,终于找到了一个bug,原因是判断不及格时没有要求成绩大于零。我们修改MyUtil.java,增加对负分的判断,代码如下:

再次运行测试,测试结果符合预期,如下图所示:


(7)测试边界情况,对输入为“0,60,70,80,90,100”这些边界情况进行测试的代码如下:


·我们发现边界情况中输入100时有一个Bug。我们修改MyUtil.java,把判断优秀的条件中包含输入为100的情况,代码如下:

再次执行测试,结果如下:


(二)TDD(Test Driven Devlopment, 测试驱动开发):就是一种先写测试代码,然后再写产品代码的开发方法。
·TDD的一般步骤如下:
明确当前要完成的功能,记录成一个测试列表
快速完成编写针对此功能的测试用例
测试代码编译不通过(没产品代码呢)
编写产品代码
测试通过
对代码进行重构,并保证测试通过(重构下次实验练习)
循环完成所有功能的开发
操作截图如下:
在MyUtilTest类中运行,绿色表示被执行部分测试通过。
练习内容
写一个类测试编写的复数类的方法
- 构造函数,将实部,虚部都置为0
- 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
- 设置实部,设置虚部
- 复数相加
- 复数相减
- 复数相乘
public class Complex {
private double realPart;
private double imaginPart;
public Complex(){
double realPart;
double imaginPart;
}
public Complex(double r,double i){
double realPart;
double imaginPart;
this.realPart=r;
this.imaginPart=i;
}
public double getRealPart(){
return realPart;
}
public double getImaginPart(){
return imaginPart;
}
public void setRealPart(double d){
this.realPart=d;
}
public void setImaginPart(double d) {
this.imaginPart =d;
}
public void ComplexAdd(Complex c){
this.realPart+=c.realPart;
this.imaginPart+=c.imaginPart;
}
public void ComplexAdd(double c){
this.realPart+=c;
}
public void ComplexMinus(Complex c){
this.realPart-=c.realPart;
this.imaginPart-=c.imaginPart;
}
public void ComplexMinus(double c){
this.realPart-=c;
}
public void ComplexMulti(Complex c){
this.realPart*=c.realPart;
this.imaginPart*=c.imaginPart;
}
public void ComplexMulti(double c){
this.realPart*=c;
}
}
测试代码
import junit.framework.TestCase;
import org.junit.Test;
import static org.junit.Assert.*;
public class ComplexTest extends TestCase{
Complex c1=new Complex(3,5);
Complex c2=new Complex(3,5);
double a=5;
@Test
public void testComplexAdd() throws Exception {
c1.ComplexAdd(c2);
assertEquals(6.0,c1.getRealPart());
assertEquals(10.0,c1.getImaginPart());
}
@Test
public void testComplexMinus() throws Exception {
c1.ComplexMinus(c2);
assertEquals(0.0,c1.getRealPart());
assertEquals(0.0,c1.getImaginPart());
}
@Test
public void testComplexMulti() throws Exception {
c1.ComplexMulti(c2);
assertEquals(9.0,c1.getRealPart());
assertEquals(25.0,c1.getImaginPart());
}

20145103JAVA第二次实验报告的更多相关文章
- 20145330《Java程序设计》第二次实验报告
20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...
- 20145320《Java程序设计》第二次实验报告
20145320<Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.12 15: ...
- 《Java程序设计》第二次实验报告
20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ...
- 20145333 《Java程序设计》第二次实验报告
2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ...
- 20145240 《Java程序设计》第二次实验报告
20145240 <Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验 ...
- 第二次实验报告:使用 Packet Tracer 分析应用层协议
个人信息: 姓名:倪晓东 班级:计算1811 学号:201821121020 1 实验目的 熟练使用Packet Tracer工具.分析抓到的应用层协议数据包,深入理解应用层协议,包括语法.语义.时序 ...
- java第二次实验报告
课程:Java实验 班级:201352 姓名:池彬宁 学号:20135212 成绩: 指导教师:娄佳鹏 实验日期:15.05.05 实验密级: ...
- java程序设计第二次实验报告
北京电子科技学院(BESTI) 实验报告 课程:数据结构 班级:1352 姓名:何伟钦 学号:20135223 成绩: 指导教师:娄嘉鹏 实验日期: ...
- java第二次实验报告20135231
Java实验报告二:Java面向对象程序设计 20135231 何佳 实验要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉 ...
随机推荐
- 【BZOJ4297】[PA2015]Rozstaw szyn 树形DP
[BZOJ4297][PA2015]Rozstaw szyn Description 给定一棵有n个点,m个叶子节点的树,其中m个叶子节点分别为1到m号点,每个叶子节点有一个权值r[i].你需要给剩下 ...
- js 跨域 之 修改服务器配置-XAMPP-Apache (nginx 拉到最后!)
js高程第21章提到了ajax 跨域技术,方法有很多,如图: 我主要讲这个: 其实代码就是这样就好了,当然只兼容 IE9 及之后的版本 ,IE9 之前的版本请去原书看吧,Page 600 var xh ...
- 操作数组可以通过Array这个类来操作(不需要考虑数组的类型!!!)
这段代码通过Array这个类,把值取出来,存到collection里,不需要考虑数组的类型
- mysql创建用户,以及分配权限
创建用户create user test identified by '123456'; 删除用户DROP USER ''@'localhost'; //删除所有host为localhost的用户 给 ...
- 【react表格组件】react-virtualized虚拟列表
https://css-tricks.com/rendering-lists-using-react-virtualized/
- Purpose of ContextLoaderListener in Spring
The ApplicationContext is where your Spring beans live. The purpose of the ContextLoaderListener is ...
- javascript 之 typeof 与 instanceof
1.typeof:返回一个表达式的数据类型的字符串 返回结果为js的数据类型,包括number,boolean,string,object,undefined,function. var a = 1; ...
- maven之jre默认配置
需要在用户或者全局settings.xml中做如下配置 例:用户配置: 添加代码: <profile> <id>jdk-1.8</id> <activatio ...
- 002-shell变量定义、使用、字符串、数组、注释
一.变量定义 定义变量时,变量名不加美元符号($) name="lhx" 注意,变量名和等号之间不能有空格.同时,变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线, ...
- shiro的/favicon.ico问题
登录成功之后跳转/favicon.ico问题. 1.spring-shrio.xml里面配置加上 /favicon.ico = anon 2.web.xml中配置中加上: <mime-mappi ...