运用Junit进行单元测试
软工0801 孙小宇 [1**********]4
一、实验目的
1、了解Junit4安装过程,进行安装实验。 2、掌握Junit4的使用方法。
3、能够使用Junit4进行简单的测试工作。
二、实验环境
操作系统:Windows XP + SP2 应用系统:JDK1.5、Junit 4.48
三、实验原理
1、取得Junit-4.8.jar文件,将其放至C:\Program Files\Java\ jdk1.5.0\lib目录下,然后将“.;C:\Program Files\Java\jdk1.5.0\lib”加入到ClassPath中。
2、掌握Junit4.4的用法:JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。以下是Junit4定义的一些 Annotations:
. org.junit.Test . org.junit.Before . org.junit.After . org.junit.BeforeClass . org.junit.AfterClass . org.junit.Ignore
. org.junit.runner.RunWith
. org.junit.runners.Suite.SuiteClasses
. org.junit.runners.Parameterized.Parameters:
3、使用Junit4.80测试nextdate包。
nextdate包是一个实现“输入3个参数:年(year)、月(month)、日(day),返回输入日期后面的那个日期”的面向对象程序。该包由1个抽象类(CalendarUnit)、4个具体类(Date、Month、Year、Day)组成。
下面是详细描述。 ① CalendarUnit类
职责:提供一个操作在子类中设置属性值;提供一个布尔操作,说明在子类中的属性是否可以增1。
package nextdate;
public abstract class CalendarUnit { protected int currentPos;
protected void setCurrentPos(int pCurrentPos){ currentPos = pCurrentPos; }
protected int getCurrentPos(){ return currentPos; }
protected abstract boolean increment(); }
② Date类
职责:Date对象由Day、Month和Year 3个对象组成。Date对象通过这三个对象的布尔增量方法增1。如果Day和Month对象不能加1,则Date根据需要重新设置Day和Month;如果是一年的最后一天,则Year也要加1。printDate操作通过Day、Month和Year对象中的get()成员函数,以mm/dd/yyyy格式输出日期。
package nextdate; public class Date { private Day d; private Month m; private Year y;
public Date(int pMonth, int pDay, int pYear) { y = new Year(pYear); m = new Month(pMonth,y); d = new Day(pDay,m); }
public void increment(){ if(! d.increment()){ if(! m.increment()){ y.increment(); m.setMonth(1,y); }
d.setDay(1,m); }
}
public void printDate(){
System.out.println(m.getMonth()+"/"+d.getDay()+"/"+y.getYear()); } }
③ Day类
职责:Day对象有一个私有Month属性,用以决定Day取值是要加1还是复位。如果复位,Month属性值需增加1。提供get()和set()服务,以及所继承的布尔增量方法。
package nextdate;
public class Day extends CalendarUnit{ private Month m;
public Day(int pDay, Month m) { setDay(pDay,m); }
public boolean increment(){ currentPos+=1;
if(currentPos
public void setDay(int pDay, Month m){ setCurrentPos(pDay); this.m = m; }
public int getDay(){ return currentPos; } }
④ Month类
职责:Month对象有一个私有Year属性,用以决定2月份是闰月还是平月。Month对象有一个私有数组属性,用以保存每月份的最后一天。提供get()和set()服务,以及所继承的布尔增量方法
package nextdate;
public class Month extends CalendarUnit{ private Year y;
private int[] sizeIndex = {31,28,31,30,31,30,31,31,30,31,30,31};
public Month(int pMonth, Year y) {
setMonth(pMonth,y); }
public void setMonth(int pMonth, Year y){ setCurrentPos(pMonth); this.y = y; }
public int getMonth(){ return currentPos; }
public int getMonthSize(){
if (y.isLeap()) sizeIndex[1] = 29; else sizeIndex[1] = 28;
return sizeIndex[currentPos - 1]; }
public boolean increment(){ currentPos += 1;
if(currentPos > 12) return false; else return true; } }
⑤ Year类
职责:提供一个布尔服务,说明当前值是否为闰年。提供get()和set()服务,以及所继承的布尔增量方法。
package nextdate;
public class Year extends CalendarUnit{ public Year(int pYear) { setCurrentPos(pYear); }
public int getYear(){ }
public boolean increment(){ currentPos = currentPos + 1; return true; }
public boolean isLeap(){
if (((currentPos % 4 ==0) && (currentPos % 400 != 0)) || (currentPos % 400 ==0))
return true; else return false; } }
四、实验结果
. 等价类划分:划分输入数据
. 根据以上分析设计测试用例:
五、实验总结
本次测试涉及预期测试需求,其他各个模块均已实现,测试功能正常,所发现的bug也已修复并验证通过。对比原计划的完成准则:“所有测试用例都覆盖;最后一次回归测试发现缺陷数:0,本次测试已圆满完成,且所测功能已满足需求及质量标准。
运用Junit进行单元测试
软工0801 孙小宇 [1**********]4
一、实验目的
1、了解Junit4安装过程,进行安装实验。 2、掌握Junit4的使用方法。
3、能够使用Junit4进行简单的测试工作。
二、实验环境
操作系统:Windows XP + SP2 应用系统:JDK1.5、Junit 4.48
三、实验原理
1、取得Junit-4.8.jar文件,将其放至C:\Program Files\Java\ jdk1.5.0\lib目录下,然后将“.;C:\Program Files\Java\jdk1.5.0\lib”加入到ClassPath中。
2、掌握Junit4.4的用法:JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。以下是Junit4定义的一些 Annotations:
. org.junit.Test . org.junit.Before . org.junit.After . org.junit.BeforeClass . org.junit.AfterClass . org.junit.Ignore
. org.junit.runner.RunWith
. org.junit.runners.Suite.SuiteClasses
. org.junit.runners.Parameterized.Parameters:
3、使用Junit4.80测试nextdate包。
nextdate包是一个实现“输入3个参数:年(year)、月(month)、日(day),返回输入日期后面的那个日期”的面向对象程序。该包由1个抽象类(CalendarUnit)、4个具体类(Date、Month、Year、Day)组成。
下面是详细描述。 ① CalendarUnit类
职责:提供一个操作在子类中设置属性值;提供一个布尔操作,说明在子类中的属性是否可以增1。
package nextdate;
public abstract class CalendarUnit { protected int currentPos;
protected void setCurrentPos(int pCurrentPos){ currentPos = pCurrentPos; }
protected int getCurrentPos(){ return currentPos; }
protected abstract boolean increment(); }
② Date类
职责:Date对象由Day、Month和Year 3个对象组成。Date对象通过这三个对象的布尔增量方法增1。如果Day和Month对象不能加1,则Date根据需要重新设置Day和Month;如果是一年的最后一天,则Year也要加1。printDate操作通过Day、Month和Year对象中的get()成员函数,以mm/dd/yyyy格式输出日期。
package nextdate; public class Date { private Day d; private Month m; private Year y;
public Date(int pMonth, int pDay, int pYear) { y = new Year(pYear); m = new Month(pMonth,y); d = new Day(pDay,m); }
public void increment(){ if(! d.increment()){ if(! m.increment()){ y.increment(); m.setMonth(1,y); }
d.setDay(1,m); }
}
public void printDate(){
System.out.println(m.getMonth()+"/"+d.getDay()+"/"+y.getYear()); } }
③ Day类
职责:Day对象有一个私有Month属性,用以决定Day取值是要加1还是复位。如果复位,Month属性值需增加1。提供get()和set()服务,以及所继承的布尔增量方法。
package nextdate;
public class Day extends CalendarUnit{ private Month m;
public Day(int pDay, Month m) { setDay(pDay,m); }
public boolean increment(){ currentPos+=1;
if(currentPos
public void setDay(int pDay, Month m){ setCurrentPos(pDay); this.m = m; }
public int getDay(){ return currentPos; } }
④ Month类
职责:Month对象有一个私有Year属性,用以决定2月份是闰月还是平月。Month对象有一个私有数组属性,用以保存每月份的最后一天。提供get()和set()服务,以及所继承的布尔增量方法
package nextdate;
public class Month extends CalendarUnit{ private Year y;
private int[] sizeIndex = {31,28,31,30,31,30,31,31,30,31,30,31};
public Month(int pMonth, Year y) {
setMonth(pMonth,y); }
public void setMonth(int pMonth, Year y){ setCurrentPos(pMonth); this.y = y; }
public int getMonth(){ return currentPos; }
public int getMonthSize(){
if (y.isLeap()) sizeIndex[1] = 29; else sizeIndex[1] = 28;
return sizeIndex[currentPos - 1]; }
public boolean increment(){ currentPos += 1;
if(currentPos > 12) return false; else return true; } }
⑤ Year类
职责:提供一个布尔服务,说明当前值是否为闰年。提供get()和set()服务,以及所继承的布尔增量方法。
package nextdate;
public class Year extends CalendarUnit{ public Year(int pYear) { setCurrentPos(pYear); }
public int getYear(){ }
public boolean increment(){ currentPos = currentPos + 1; return true; }
public boolean isLeap(){
if (((currentPos % 4 ==0) && (currentPos % 400 != 0)) || (currentPos % 400 ==0))
return true; else return false; } }
四、实验结果
. 等价类划分:划分输入数据
. 根据以上分析设计测试用例:
五、实验总结
本次测试涉及预期测试需求,其他各个模块均已实现,测试功能正常,所发现的bug也已修复并验证通过。对比原计划的完成准则:“所有测试用例都覆盖;最后一次回归测试发现缺陷数:0,本次测试已圆满完成,且所测功能已满足需求及质量标准。