20172324 2017-2018-2《程序设计与数据结构》实验2报告
20172324 2017-2018-2《程序设计与数据结构》实验2报告
课程:《程序设计与数据结构》
班级: 1723
姓名: 曾程
学号:20172324
实验教师:王志强
实验日期:2018年4月18日
必修/选修: 必修
一、实验内容
- 利用JUnit测试工具测试编写的类是否有问题
- 了解TDD是什么并利用JUnit来辅助进行TDD测试研究StringBuffer
- 代码扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
- 使用StarUML建模,在UML中表达类,继承,接口实现,组合
- 其中Eclipse相关的内容参考Intellj IDEA 简易教程换成IDEA实现
二、实验过程及结果
这几个实验不算难,看老师给的步骤就能按部就班的完成,但是第一次接触的时候最重要的就是理解。比如第一个实验,因为我没有directory目录,所以我就卡了很久。后面的东西也就难以理解了。
第一个实验是利用JUnit4测试一个成绩所对应的等级时候有问题,这个实验不难,所以思考的是JUnit3和JUnit4的区别。具体的可以看JUnit3 与 JUnit4 的区别。简单的说有三个不同,一个是JUnit4使用org.junit.包而JUnit3.8使用的是junit.Framework。第二个是在JUnit3中,测试类需要继承junit.framework.TestCase类,而在JUniy4则不用。第三是JUnit3通过分析方法名称来识别测试方法:方法名必须以“test”为前缀,它必须返回void,而且它必须没有任何参数(例如 public void testDivide())。JUnit4中,测试方法不必以'test'为前缀,而是使用@Test注解。总体来言JUnit4更简单、更丰富、更易于使用。
第二个实验中进行TDD测试了索引所对应的字符串是否正确、返回当前容量(特别说了capacity和length的区别,前者是目前的最大容量,后者是字符串的长度)、返回第一次出现的指定子字符串在此字符串中的索引。
第三个实验用自己的学号%6进行取余运算,根据结果进行代码扩充让系统支持Byte类(对于我的学号,定义byte类就ok了)。学长指出了我的变量名之间不对应的问题,在下面问题中修正。
第四个实验以TDD的方式开发一个复数类并要求定义属性并生成getter,setter,定义构造函数和加减乘除这几个方法。我第一遍没能理解题意。在重写toString方法时毫无头绪以为只是随意输出值就可以了,后面发现当我输入(a+bi)时idea提示我没有定义i之后才感觉到应该想办法重写toString方法。第四个实验遇到的问题比较多,我在下面一一解答了。
第五个实验是画类图,感觉非常有趣,需要注意的就这两点,一个是+-~#分别代表的含义,还有一个是抽象化是用斜体标识的。
三、实验过程中遇到的问题和解决过程
-
问题1:第一步就出现了问题...我只有package包没有Directory目录,所以我无法设置将目录转变为Test Sources Root利用JUnit去测试。
-
问题1解决方案:无法创建目录的原因是因为等级不够,原来最高一级的就是目录了,所以最后重新创建了一个module,把原来的东西复制到这个模块下,就能重新创建目录了。
-
问题2:在实验三中
public class Data
会提示错误,public class Document
也会提示错误,原因? -
问题2解决方案:
public class Data
提示错误是因为Data是抽象类,需要用abstract表明是抽象类型,如果不用abstract说明是抽象方法,后面就无法继承DisplayValue()这个方法了。public class Document
则需要在名为Document的文件里声明。
附上改正之后的代码截图
-
问题3:我的assertEquals上为什么总有一条横线?
-
问题3解决方案:前面定义的实部和虚部都是double型的,我上网查找后发现assertEquals只支持int型,long型或boolean型的,总之在此时不支持(double,double)型的,我就寻思着怎么办啊...然后发现支持(string,string)型的。那就把数字加上""变成字符串,把后面的方法再加一个toString方法转化为字符串,assertEquals上的横线就消失了。
-
问题4:如图,找不到b.j.a.a$1的类文件,我???
-
问题4解决方案:这是什么文件?上网查也没查出来,但前半句是提示找不到文件包。后来我检查的时候才发现那个import里莫名奇妙的给我导入了这个文件,所以才出现这样的错误提示,我删掉之后就没有了。
-
问题5及其解决方案:getter和setter方法那里,我按照老师给的提交标准输入了一样的东西但一直都报错,提示是需要我改写成静态方法,可是这样的话就不能达到get到不同的值了。肯定有问题。其实在我写这段话之前这个问题都还没有解决。直到我刚刚再看了一边问题四才发现原来构造的两个函数,再试一次发现真的是设成静态的就可以了 ....好气哦....