20172329 2017-2018-2 《程序设计与数据结构》实验二报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 王文彬
学号:20172329
实验教师:王志强
实验日期:2018年4月21日
必修/选修: 必修
1.实验内容
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 熟悉S.O.L.I.D原则
- 了解设计模式
- 完成实验。
2. 实验过程及结果
一、理解内容
首先,我根据老师所给的几篇博客中大致了解了什么是TDD测试,什么是S.O.L.I.D原则并且基于课本更加深层次的对封装、继承、多态的内容进行学习;之后,根据老师所给的例子和博客的相关步骤就开始了实验。
二、实验第一个提交点内容及其过程
参考实验二 完成单元测试的学习
提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号
本提交点考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试
第一个实验因为是第一次接触到TDD测试,一切都显的那么陌生,感觉需要下载的东西很多;
1、准备阶段:首先,使用IDEA在自己的根目录下建立了一个test的测试文件夹,并且将它定义为了源目录,
这个目录是为了可以将自己已经编好的程序可以进一步进行测试所对应的测试文件夹。
之后,紧接着下载了一个叫做JUnit的插件,如果想要完成测试,这个插件必不可少,掌握核心科技!!
我们的准备工作也就到此结束了,接下来就要开始我们的实验了;
2、实验开始:
首先将自己想要测试的类编写好,在第一行的位置左右,会出现一个形似下图的“小灯泡”并且会出现字样:创建测试。
点击一下那个“创建测试”后,test目录中就会出现一个测试程序,之后我们就可以开始我们的测试之路了,首先,我之前已经写好的一个被测试程序在待命,为的就是现在,测试程序需要继承被测试类,并且编写测试对象,在这里我们就需要另外一个很关键的方法叫做assertEquals
,其作用就是为了去对比我们所期待的值和预计的值是否相同(ps:此处的相同不仅要内容相同,而且属性也要相同),相同才会显示一条绿线,表示通过,如同下图:
在测试通过以后,再加上自己的学号水印,也就算是第一个实验结束了。
三、实验第二个提交点内容及其过程
参考 积极主动敲代码,使用JUnit学习Java
以 TDD的方式研究学习StringBuffer
提交你的单元测试用例和测试通过的截图,截图要加上学号水印
测试自己会不会写JUnit测试用例
在有了第一个实验的基础上,开始我的第二个实验也变得不是很困难;
首先,继续去看要求里所给出的博客,根据要求开始进行对被测试代码的编写:
完成了之后,继续实验一的步骤,点击“创建测试”,开始编写测试类:
注:在编写测试类的时候,要记得写清楚测试代码是什么,就是图中“@test”后面的代码,@test不能丢。
四、实验第三个提交点内容及其过程
参考实验二 Java面向对象程序设计
对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
用自己的学号%6进行取余运算,根据结果进行代码扩充:
0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
这道题应该是对于S.O.L.I.D原则最早的引入,所以当我第一次看到这道题目的时候,稍微有点懵,感觉好多啊,第一个想法就是前面两个不是很难,这个肯定就开始增加难度了,果不其然,虽然对于代码的敲入模仿着老师的例子敲其实就可以完成任务,但这终究需要弄懂,所以不如先看懂吧,于是就开始了对老师博客的仔细研读;老师的博客里进行了两次大的改动,老师举例“客户需要支持Float
类,因为基于S.O.L.I.D原则,Document
类不能做出改变,所以就需要用到设计模式了,也就引入了”设计工厂“这个概念。借用老师的图说明一下
感觉这个图还是很明细的;
ps:老师截图里明明是实现int
类,误导我们这些小朋友.....
这是我实现Double
类的实验图
五、实验第四个提交点内容及其过程
提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印
任务:以TDD的方式开发一个复数类Complex,要求如下:
// 定义属性并生成getter,setter
double RealPart;
double ImagePart;
// 定义构造函数
public Complex()
public Complex(double R,double I)
//Override Object
public boolean equals(Object obj)
public String toString()
// 定义公有方法:加减乘除
Complex ComplexAdd(Complex a)
Complex ComplexSub(Complex a)
Complex ComplexMulti(Complex a)
Complex ComplexDiv(Complex a)
在拿到这一道实验要求的时候,其实是发觉需要一些套路,并且编写复数的四则运算;
首先,按照要求编写上面的集中方法以及定义变量,进行相关的计算,然后开始测试:
六、实验第五个提交点内容及其过程
使用StarUML对实验二中的代码进行建模,发类图的截图,加上学号水印
类图中只少两个类
类,继承,接口实现,组合在UML中表达
通过软件
进行UML图制作;
3. 实验过程中遇到的问题和解决过程
-问题1:在编写复数类并且进行测试的时候,虽然内容相同,但是总是显示不通过?
- 问题1解决方法:
第一种,在蓝墨云里,学长说在后面加上.toString就可以了,因为两个返回的类型不一样,试过以后的确可以;
第二种,我自己看了一篇别人的博客以后,关于对比String几种类型的博客,发现用String.valueOf
也是可以的;
其他(感悟、思考等)
感觉时间越来越少,有时候自己在敲代码的时候,很茫然,不知道为何敲,其目的是什么,真的现在在班里呈现一种虚假的繁荣的感觉。
参考资料
蓝墨云班课
积极主动敲代码,使用JUnit学习Java
实验二 Java面向对象程序设计
String、String.valueOf、toString 它们三者的区别总结
实验二《Java面向对象程序设计》的一点说明