实验二 面向对象程序设计
实验目的
- 一、提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号。考查JUnit会不会使用,测试用例至少要包含正常情况,错误情况,边界情况的测试。
- 二、以 TDD的方式研究学习StringBuffer。
- 三、对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式。
- 四、以TDD的方式开发一个复数类Complex。
实验内容及步骤
(一)使用JUnit,测试用例
在插件安装对话框的搜索中输入
junit
,单击JunitGenerator V2.0
,单击绿色的Install
按钮安装。因为我没有次插件,因此实在网上download到本地,再install plugin from disk
- 进行项目及文件的创建
- 创建项目
- 创建文件
- create Test(创建JUnit3)
- 增加测试用例(附产品代码)
- 测试项目结果如下图所示(含正常、异常、边界) 显示
green bar
,测试通过。
(二)以TDD的方式研究学习StringBuffer
- 新建类
以 TDD的方式研究学习StringBuffer,用junit进行单元测试
运行结果如图
(三)体会OCP原则和DIP原则的应用,初步理解设计模式
- 原代码
class Integer { int value; public Integer(){ value=100; } public void DisplayValue(){ System.out.println(value); } } class Document { Integer pi; public Document(){ pi = new Integer(); } public void DisplayData(){ pi.DisplayValue(); } } public class MyDoc{ static Document d; public static void main(String [] args) { d = new Document(); d.DisplayData(); } }
让系统支持Boolean类,Document类要修改构造方法,这还违反了OCP原则。封装、继承、多态解决不了问题,在则需要设计模式。
abstract class Data { abstract public void DisplayValue();}class Integer extends Data { int value; Integer() { value=100; } public void DisplayValue(){ System.out.println (value); }}class Boolean extends Data { boolean value; Boolean() { value = true; } public void DisplayValue(){ System.out.println (value); }}// Pattern Classesabstract class Factory { abstract public Data CreateDataObject();}class IntFactory extends Factory { public Data CreateDataObject(){ return new Integer(); }}class BooleanFactory extends Factory { public Data CreateDataObject(){ return new Boolean(); }}//Client classesclass Document { Data pd; Document(Factory pf){ pd = pf.CreateDataObject(); } public void DisplayData(){ pd.DisplayValue(); }}//Test classpublic class MyDoc { static Document d; public static void main(String[] args) { d = new Document(new BooleanFactory()); d.DisplayData(); }}
如此,再class Boolean extends Data
、class BooleanFactory extends Factory
即可使系统支持Boolean
- 运行结果
(四)以TDD的方式开发一个复数类Complex
- 要求
// 定义属性并生成getter,setterdouble RealPart;double ImagePart;// 定义构造函数public Complex()public Complex(double R,double I)//Override Objectpublic boolean equals(Object obj)public String toString()// 定义公有方法:加减乘除Complex ComplexAdd(Complex a)Complex ComplexSub(Complex a)Complex ComplexMulti(Complex a)Complex ComplexDiv(Complex a)
- 代码编写
public class Complex{ private double r; private double i; public Complex(double r, double i) { this.r = r; this.i = i; } public static double getRealPart(double r) { return r; } public static double getImagePart(double i) { return i; } public Complex ComplexAdd(Complex c) { return new Complex(r + c.r, i + c.i); } public Complex ComplexSub(Complex c) { return new Complex(r - c.r, i - c.i); } public Complex ComplexMulti(Complex c) { return new Complex(r * c.r - i * c.i, r * c.i + i * c.r); } public Complex ComplexDiv(Complex c) { return new Complex((r * c.i + i * c.r)/(c.i * c.i + c.r * c.r), (i * c.i + r * c.r)/(c.i * c.i + c.r * c.r)); } public String toString() { String s = " "; if (i > 0) s = r + "+" + i + "i"; if (i == 0) s = r + ""; if (i < 0) s = r + " " + i + "i"; return s; }}
尝试写测试代码
运行结果
(五)使用对实验二中的代码进行建模,发类图的截图,加上学号水印。类图中只少两个类。
遇到问题及解决方案
- 问题一:看教程,本来应该在插件安装对话框的搜索中输入
junit
,单击JunitGenerator V2.0
,单击绿色的Install
按钮安装。但我没有搜到JunitGenerator V2.0
。
问题一解决方案:通过百度搜索,在网上查找并下载了
http://plugins.jetbrains.com/pluginManager/?action=download&id=org.intellij.plugins.junitgen&build=IU-162.2228.15&uuid=6a6cb9f5-4107-46d7-9b1c-d8205218a73b
,到本地,然后找到插件所在位置,再install plugin from disk
,。问题二:在进行第二步操作时,出现标红,测试未通过。
- 问题二解决方案:把数据
17
换成5
就可以了。
统计PSP(Personal Software Process)时间:
步骤 | 耗时 | 百分比 |
---|---|---|
设计 | 120min | 50% |
代码实现 | 60 | 25% |
测试 | 30 | 12.5% |
分析总结 | 30 | 12.5% |
实验小结
本次实验主要学会了如何使用junit来测试代码。在不断调试中,发现junit有他得天独厚之处,方便,简洁,快速,收获很大。