2017-2018-2 20165207实验二《Java面向对象程序设计》实验报告
2017-2018-2 20165207实验二《Java面向对象程序设计》实验报告
课程:Java程序设计 班级:1652 姓名:李天林 学号:20165207
实验日期:2018年4月16日 实验序号:二
实验内容
单元测试
- 要求:需求是在一个名为MyUtil的类中完成将百分制分数转成“优、良、中、及格、不及格”五级制成绩。在写好产品代码之后,我要写测试代码测试正常情况、异常情况以及边界情况,这个过程要用Junit来完成
- 按照需求写伪代码。用IDEA在新建的20165207exp2目录下新建项目,然后新建一个类MyUtil,写进去伪代码:

- 根据我之前写的伪代码编写产品代码,之前写好的伪代码就是对这个产品代码最好的注释:

- 我的源代码应放在src测试代码在test目录,所以写测试代码之前需要新建一个目录,以下为相关的操作。首先,右击项目选择new选择directory:

然后给新建好的test设置环境变量,也就是让IDEA知道这里存的是我的测试代码。在test上右击然后MakeDirectoryas之后选择testSourceRoot,这样就把这个文件夹设置成了存放测试代码的源文件的文件夹:
- 在test目录中编写测试代码MyUtilTest,其中的测试用例分为测试正常testNormal测试边界testBoundary测试异常testException三部分:

然后编译运行,得到了如下的结果:
看来在我手工编的测试代码里,这几个测试用例都通过了。 - 然后用Junit辅助的TDD的方式重写这个例子(生成测试代码)。在这之前我先要安装插件让程序具备用Junit生成测试代码的能力。首先,在设置(setting)的插件(plugins)选项卡中选择左下角的Install JetBrains plugins:


实际上我点的是它右边的browse in ……才找到的JunitGenerator V2.0然后安装完成是这样的
插件安装完成之后,重启我的IDEA,再在灯泡上选择createTest创建测试代码
其间我也遇到了无法解析关键字Junit的问题(记录在下方问题记录中),按照教程修改一下我的路径再把junit.jar加进去之后,junit和testcase就不再为红色了
- 编写好三种情况的测试代码之后,运行,没有红条,通过了测试。完成了第一个提交点

以TDD的方式研究StringBuffer
- 输入老师给的StringBufferDemo代码,老师的代码中调用了StringBuffer中的charAt、length、capcity这几个方法,我自然应该把容量、实际长度、获取相应位置的字符这几方面写进我的测试代码里。
- 按照StringBufferDemo中调用的方法,将其更改为我的产品代码

- 写测试代码,测试我相应的产品代码中对字符串追加结果、输出长度、输出实际容量、获取相应位置的字符这几个方法

根据测试过程中出现的几个问题(写在了下方问题记录中)修改测试代码为下图
测试成功,完成了第二个提交点

。
在设计模式中添加代码使之支持short类
根据要求,我的学号07%6=1,我需要对系统进行扩充使之支持Short类。
首先,通过阅读,我对设计工厂模式,有了一定的理解,其中,Data类是抽象类规定了它的子类有显示取值的功能,抽象类Factory规定它的子类要生成Data类,生成Data类过程中通过对子类的上转型操作来让返回的子类类具有Data类的子类重写的方法。
所以要支持Short的话,我应增加Data类的子类Short,再增加Factory类的子类shortFactory。这样工厂就具备了创建Short类的上转型对象使之获得显示short型变量的值的能力。
最后为了输出short的值,我还需要在主类中修改使用上面那些类的语句。UML图大致如下
在程序中添加代码如下:
测试运行得到输出结果5207:
以TDD的方式开发复数类
题目要求的方法包括两个重载的构造方法complex、四个分别为加减乘除的方法、以及重写的两个方法:输出复数的方法toString以及判断是否与另一个复数相等的方法Equals。按照要求编写出如下的测试代码,相当于为我的complex类给出一个标准:
然后,在complex类中加入要求的这些属性和方法(中间的调试错误的过程记录在了下面的问题记录里):


在提交点4,运行complexTest测试其中的方法结果是否正确。
使用UML图对程序进行建模
之前我在工厂模式中添加short类时,对其用UML图进行建模
然后下面是实验二教程中用来说明多态的例子,Dog和Cat分别是抽象类Animal的子类,各自实现了Animal的“叫”的方法
问题记录
- 最开始编写我的MyUtilTest代码时,测试代码是自己手工编的,这里程序提示有错误:

提示不能够从静态的上下文中引用非静态方法,按照这个提示我回到之前写的MyUtil中在方法前的修饰语句中加入static,程序不再报告错误。这个问题提示我基础中的漏洞以后应当注意。 - 找不到JunitGenerator:

,我后来点上一级的browse Repository找到的。
但是解决了安装问题之后在生成的MyUtilTest2的代码中关键字Junit和Testcase是无法解析的,都是显示红颜色(找到正确的方法之前忘记截图了,故没有图片)。当时比较焦急,我没有继续看老师的教程,我觉得是缺少了某几个包文件于是就在自己的电脑上重装了一遍IDEA,但重装之后这几个关键字还是红色的。然后,我又在网上搜索这种情况,但基本上都不能解决我的问题。浪费好一段时间之后我发现老师在博客下面就写了要导入Junit.jar包的情况只是我的路径略有不同
- 在使用TDD的方式研究SringBuffer时,我在测试charAt方法时遇到了问题。程序报告中actual部分是S,except部分也是S,看起来是一样的但是不能通过

,后来我意识到charAt方法返回的是一个字符型变量也就是说它匹配的是单引号括起来的字符S,而不是我写的"S"
- 下面的问题出现在对复数类complex进行除法测试中。到提交刚结束时我才想明白问题出在哪里。最开始我让测试程序调用除法方法计算(1+2i)/(3+3i),但是程序计算出来的结果和我在纸上计算出来的正确结果不一样,测试结果一直是红色的,就是……这样子:

可能是当时有些慌张,分析程序分析的特别蠢,我以为是0.5被程序读成了0。想了一会之后,我觉得在complex类的除法方法里加一条输出语句可以让我更接近事实一些
然后在运行一次complexTest程序好像有一个了不得的事情
计算复数除法时,有类似于多项式分式或者无理数分式分母有理化的技巧。比方说复数被除数是a+bi,复数除数是c+di,计算结果就等于分式
(a+bi)/(c+di)
这个分式分子分母同乘(c-di)就能够得到除法的结果
(ac-bd)/(c^2+d^2)+(ad+bc)i/(c^2+d^2)
在程序中我创建了一个新的复数对象b来表示上面分子分母同乘的(c-di)。
在我的测试用例(1+2i)/(3+3i)中,复数对象b就应该代表的是(3-3i)。在上面截下来的运行结果里可以看到,第二次assertEquals时,这个b对象就不对了,算出来的结果自然就不是1/6而是0.5。
看来还得回去分析程序,在提交刚结束的时候,我觉得问题就出现在我创建新复数对象b的方式上:
我希望b的实部与被除数的实部相等,b的虚部与被除数的虚部相反。于是先把被除数a的引用赋给了b,然后再把b的虚部取相反数。但这种操作其实就是把a当成b操作,a不是在和一个能给自己“有理化”的另一个和自己不一样的复数b相乘,而是在和自己乘。
我意识到了操作引用不当给我带来的问题,不再使用这种方法创建对象b:
单独测试了除法,输出正确,测试也通过了:
然后,这是我的与云班课无缘的提交点4和5的截图




总结
这次影响我实验完成时间主要有几个问题,在static的环境里调用非static的方法,因为新的对象没有创建时只能通过类名调用static方法,调用非stati是非法的;对对象的引用进行不当的赋值操作导致我的程序无法正确进行计算;还有就是博客里面的要求读的不认真。这几个问题大多涉及基础,我对前面几章的内容本身就掌握不牢或者有些淡忘,提示我要经常复习。另外除了调错的能力之外,这次实验我还有一些我认为有用的收获,比如用TDD的方式设计程序先给出一个标准,与直接设计程序相比可以避免设计力度过度或者不够,以及“工厂”的设计模式来满足S.O.L.I.D的原则
2017-2018-2 20165207实验二《Java面向对象程序设计》实验报告的更多相关文章
- 实验二Java面向对象程序设计实验报告(2)
实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告
20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...
- 20162311 实验二 Java面向对象程序设计 实验报告
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- 实验二 Java面向对象程序设计实验报告
实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验 ...
- 20145326《Java程序设计》实验二Java面向对象程序设计实验报告
20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- 20155217 实验二 Java面向对象程序设计 实验报告
20155217 实验二 Java面向对象程序设计 实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模 ...
- 20145219 《Java程序设计》实验二 Java面向对象程序设计实验报告
20145219 <Java程序设计>实验二 Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S. ...
- 20162305 实验二 Java面向对象程序设计 实验报告
20162305 实验二 Java面向对象程序设计 实验报告 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D ...
随机推荐
- docker 配置文件:/etc/docker/daemon.json
/etc/docker/daemon.json 是 docker 的配置文件,默认是没有的,需要我们手动创建,可配置项如下: [root@localhost ~]$ vim /etc/docker/d ...
- PHP之语句
前面的话 任何 PHP 脚本都是由一系列语句构成的.一条语句可以是一个赋值语句,一个函数调用,一个循环,一个条件语句或者甚至是一个什么也不做的语句(空语句).语句通常以分号结束.此外,还可以用花括号将 ...
- shell 强大的awk
from here 小用法,使用awk来对文件随机抽取n行 awk 'BEGIN{srand()} {print rand()"\t"$0}' input_file | sort ...
- Shell主要逻辑源码级分析 (2)——SHELL作业控制
版权声明:本文由李航原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/110 来源:腾云阁 https://www.qclou ...
- Android技巧分享——Android开发超好用工具吐血推荐(转)
内容中包含 base64string 图片造成字符过多,拒绝显示
- 几行小代码,将Testlink的xml用例导入至excel
最近在使用Testlink时,发现导入的用例是xml格式,且没有合适的工具转成excel格式,xml使用excel打开显示的东西也太多,网上也有相关工具转成csv格式的,结果也不合人意. 那求人不如尔 ...
- IE各浏览器HACK
border:2px solid #00f; /*IE.ff的属性*/ border:2px solid #090\9; /* IE6/7/8的属性 */ border:2px solid #F90\ ...
- PMP 笔记
项目: 为创造独特的产品.服务或结果而进行的临时性工作. 项目特征: 独特性:Unique.临时性:Temporary.渐进明细. 渐进明细:预算越来越精细.比如三峡工程中,预算从10亿级的误差到1亿 ...
- AB压力测试工具
1.安装AB工具: yum install httpd-tools 2.测试: ab -n -c http://localhost.com/ 其中-n表示请求数,-c表示并发数 3.测试结果 [roo ...
- List<Map<String, Object>> 与 json 互转
近期做指纹识别,需要用到缓存文件,数据量并不大,用redis不合适,所以用到了txt文件. 思路是 1.定时查询指纹,存到txt缓存文件中. 2.新增或删除指纹时,查询指纹,存到txt缓存文 ...