《软件工程A》实验报告(三)
实验名称:软件测试之单元测试
所使用的工具软件及环境:
硬件环境: 微机1台。
软件环境: 操作系统:Windows;建模工具:Visio或Rose;测试工具Junit;数据库:MySQL(可选);开发工具包:JDK(可选);开发环境:Eclipse(可选);Web服务器:Tomcat(可选);浏览器:IE(可选)。
一、实验目的
对JAVA单元测试有初步的了解,学会使用Junit编写自己的测试用例,并对被测试类进行测试。
二、实验内容
- 阅读理解Junit的工作机制。
- Eclipse环境下的单元测试。
- 利用Junit编写测试用例,并对被测试类进行相关功能测试。 1. 验证Book类的equals方法;2. 设计Triangle类(或自定义的类)的测试用例,并进行测试。
三、实验步骤(验证)
实验采用Eclipse
- 开始—>程序—> Eclipse,启动Eclipse工作环境。
- File—>New—> Java Project,如图所示,点击Next。
- 项目名称(Project name)输入“UnitTest”,点击Next。
- 选中Libraries标签,点击“add Library”添加必要的Junit类库。
- 选中Libraries标签,点击“add Library”添加必要的Junit类库。
- 选择Junit3,点击Finish,完成类库的添加,如图所示
- 点击Finish,完成UnitTest项目的设置,进入项目工作界面。
- 在UnitTest上右键,——>New——>Class,弹出添加类窗口。Package中填写cn.edu.zstu,Name中填写Book。(注意大小写)
- 在Book类中填充内容如下,完成Book类的编写。
- 右键点击UnitTest项目,—>New—>Other,选择Java下的JUnit下的JUnit Test Case,点击Next:
- 在Package中填写“cn.edu.zstu”,在Name中填写“BookTest”,在Class under test中填写“cn.edu.zstu”(注意大小写),选中setUp(),teardown()和constructor()三个复选框,点击Next;在弹出的窗口中选中equals成员函数,所完成的BookTest类如图所示。
- 为BookTest添加两个私有成员变量private Book book1;private Book book2;
- 分别完成setUp()和tearDown()两个成员函数
- 编写测试用例函数testEqualsObject(),使用下列两条语句替换fail(“Not yet implemented”);asserFalse(book2.equals(book1));asserTrus(book1.equals(book1));
- 点击Run As JUit Test,观察测试运行结果。
自行验证:
3.1 Book类
package cn.edu.zstu;
public class Book {
private String title;
private double price;
public Book(String title,double price){
this.title=title;
this.price=price;
}
public boolean equals(Object object){
if (object instanceof Book){
Book book=(Book)object;
return getTitle().equals(book.getTitle()) && getPrice()==book.getPrice();
}
return false;
}
public double getPrice(){
return price;
}
public String getTitle(){
return title;
}
public void setTitle(String title){
this.title=title;
}
}
3.2 BookTest类
package cn.edu.zstu;
import junit.framework.TestCase;
public class BookTest extends TestCase {
private Book book1;
private Book book2;
public BookTest(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
book1 = new Book("ES",13.88);
book2 = new Book("The ES54",11.99);
}
protected void tearDown() throws Exception {
super.tearDown();
book1 = null;
book2 = null;
}
public void testEqualsObject(){
// fail("Not yet implemented");
assertFalse(book2.equals(book1));
assertFalse(book1.equals(book2));
}
}
3.3 验证结果分析
3.3.1 正确验证
3.3.2 缺陷验证
修改BookTest类中的测试用例函数testEqualsObject(),将
assertFalse(book1.equals(book2));
修改为assertFalse(book2.equals(book2));
点击Run As JUit Test,运行结果如下图所示,测试提示错误。
四、设计Triangle类(或自定义的类)的测试用例
4.1 设计分析
首先定义一个Triangle类表示三角形,并定义三个double型变量a、b、c分别表示三角形的三条边长。其后,为该类定义带三个参数的构造方法,通过传递a、b、c三个参数创建三角形对象。
接下来,分析三角形的类型情况:
- 不构成三角形:两条边之和小于等于第三边,或任意一条边不为正数;
- 构成等边三角形:三条边都相等;
- 构成等腰直角三角形:任意两边相等,且两条边的平方和等于第三边的平方和;
- 构成等腰三角形:任意两条边相等;
- 构成直角三角形:两条边的平方和等于第三边的平方和;
- 构成普通三角形:两条边之和大于第三边,且三边均为正数。
针对上述内容,在Triangle类中编写what_triangle()函数,用以判断三角形类型。其算法流程图如下图所示:
4.2 Triangle类
package cn.edu.zstu;
public class Triangle {
private double a;
private double b;
private double c;
public Triangle(double a,double b,double c){
this.a=a;
this.b=b;
this.c=c;
}
public int what_triangle(){
if((a+b<=c||a+c<=b||b+c<=a)||(a<=0)||(b<=0)||(c<=0)){
System.out.println(a+" "+b+" "+c+" 不能构成三角形!");
return 0;
}
else {
if (a==b && b==c){
System.out.println(a+" "+b+" "+c+" 构成等边三角形!");
return 5;
} else if ((a==b||a==c||b==c) && (Math.abs(a*a+b*b-c*c)<=0.000001||Math.abs(a*a+c*c-b*b)<=0.000001||Math.abs(b*b+c*c-a*a)<=0.000001)){
System.out.println(a+" "+b+" "+c+" 构成等腰直角三角形!");
return 4;
}else if (a==b||a==c||b==c) {
System.out.println(a+" "+b+" "+c+" 构成等腰三角形!");
return 3;
} else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)){
System.out.println(a+" "+b+" "+c+" 构成直角三角形!");
return 2;
}
else {
System.out.println(a+" "+b+" "+c+" 构成普通三角形!");
return 1;
}
}
}
}
4.3 测试设计分析
接下来仿照三中方法创建Junit测试用例,为了测试三角形类的所有类型,设计测试案例如下:
表1** **Triangle测试用例
序号
a
b
c
三角形类型
对应类型编号
t1
1
2
3
不能构成三角形
0
t2
1
2
5
不能构成三角形
0
t3
3
3
3
等边三角形
5
t4
3
2
3
等腰三角形
3
t5
4
4
4√2
等腰直角三角形
4
t6
3
4
5
直角三角形
2
t7
0
3
3
不构成三角形
0
t8
7
6
3
普通三角形
1
t9
-1
9
3
不构成三角形
0
由此,为TriangleTest添加9个Triangle私有成员对象t1-t9,并在setUp()中完成它们的初始化,数据与上表一致。其后,编写测试用例函数testEqual(),使用:
assertEquals(类型编号,t序号.what_triangle());
测试各案例是否均符合实际,验证判断三角形类型函数的实现。
4.4 TriangleTest类
package cn.edu.zstu;
import junit.framework.TestCase;
public class TriangleTest extends TestCase {
private Triangle t1;
private Triangle t2;
private Triangle t3;
private Triangle t4;
private Triangle t5;
private Triangle t6;
private Triangle t7;
private Triangle t8;
private Triangle t9;
public TriangleTest(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
t1=new Triangle(1,2,3);
t2=new Triangle(1,2,5);
t3=new Triangle(3,3,3);
t4=new Triangle(3,2,3);
t5=new Triangle(4,4,4*Math.sqrt(2));
t6=new Triangle(3,4,5);
t7=new Triangle(0,3,3);
t8=new Triangle(7,6,3);
t9=new Triangle(-1,9,3);
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testEquals() {
//fail("Not yet implemented");
assertEquals(0,t1.what_triangle());
assertEquals(0,t2.what_triangle());
assertEquals(5,t3.what_triangle());
assertEquals(3,t4.what_triangle());
assertEquals(4,t5.what_triangle());
assertEquals(2,t6.what_triangle());
assertEquals(0,t7.what_triangle());
assertEquals(1,t8.what_triangle());
assertEquals(0,t9.what_triangle());
}
}
4.4 测试结果及分析
4.4.1 正确验证
先用各案例正确的三角形类型编号对各案例进行测试,运行结果如下图所示。
4.4.2 缺陷验证
(1)不能构成三角形测试
修改TriangleTest类中的测试用例函数testEquals(),将assertEquals(0, t1.what_triangle()); 修改为assertEquals(1, t1.what_triangle()); 即将不能构成三角形的案例指认为普通三角形。
点击Run As JUit Test,运行结果如下图所示,测试运行至该句发现错误进行提示,并不继续测试下去。
(2)构成等边三角形测试
修改TriangleTest类中的测试用例函数testEquals(),将assertEquals(5, t3.what_triangle()); 修改为assertEquals(3, t3.what_triangle()); 即将等边三角形的案例指认为等腰三角形。
点击Run As JUit Test,运行结果如下图所示,测试运行至该句发现错误进行提示,并不继续测试下去。
(3)构成等腰三角形测试
修改TriangleTest类中的测试用例函数testEquals(),将assertEquals(3, t4.what_triangle()); 修改为assertEquals(2, t4.what_triangle()); 即将等腰三角形的案例指认为直角三角形。
点击Run As JUit Test,运行结果如下图所示,测试运行至该句发现错误进行提示,并不继续测试下去。
(4)构成等腰直角三角形测试
修改TriangleTest类中的测试用例函数testEquals(),将assertEquals(4, t5.what_triangle()); 修改为assertEquals(3, t5.what_triangle()); 即将等腰直角三角形的案例指认为等腰三角形。
点击Run As JUit Test,运行结果如下图所示,测试运行至该句发现错误进行提示,并不继续测试下去。
(5)构成等腰三角形测试
在上述案例测试修改中已进行测试,不再赘述。
(6)构成普通三角形测试
在上述案例测试修改中已进行测试,不再赘述。
总结:通过JUnit测试,验证本程序可以正确判断三角形的所有类型。
五、结果分析
本次实验,主要是对JAVA单元测试的初步了解。
根据指导书中的Book类测试案例,学习在Eclipse中添加JUnit库作为测试环境对编写代码进行测试。在针对需求分析,编写完类对象和内部函数的基础上进行测试。首先设计测试案例,可以按照划分等价类、建立等价类表、组合等价类的顺序设计测试用例。然后利用项目下的JUnit的JUnit Test Case创建Test类,并结合类定义编写测试用例。测试用例基于使用类函数并返回测试结果。若返回结果正确,则表明测试用例无误且类函数无误;若测试用例返回结果错误,则在失败溯源处显示错误所在行,可观察改正对应行或类函数错误后重试。而后,在Triangle类的测试案例中进行实践。
通过本次实验,我进一步学习了软件测试的方法,了解了更为细致的测试过程,有益于日后自己编程开发软件的测试。
版权归原作者 阮阮的阮阮 所有, 如有侵权,请联系我们删除。