0


软件工程——实验3:软件测试之单元测试

《软件工程A》实验报告(三)


实验名称:软件测试之单元测试

所使用的工具软件及环境:

硬件环境: 微机1台。

软件环境: 操作系统:Windows;建模工具:Visio或Rose;测试工具Junit;数据库:MySQL(可选);开发工具包:JDK(可选);开发环境:Eclipse(可选);Web服务器:Tomcat(可选);浏览器:IE(可选)。


一、实验目的

对JAVA单元测试有初步的了解,学会使用Junit编写自己的测试用例,并对被测试类进行测试。

二、实验内容

  1. 阅读理解Junit的工作机制。
  2. Eclipse环境下的单元测试。
  3. 利用Junit编写测试用例,并对被测试类进行相关功能测试。 1. 验证Book类的equals方法;2. 设计Triangle类(或自定义的类)的测试用例,并进行测试。

三、实验步骤(验证)

实验采用Eclipse

  1. 开始—>程序—> Eclipse,启动Eclipse工作环境。
  2. File—>New—> Java Project,如图所示,点击Next。
  3. 项目名称(Project name)输入“UnitTest”,点击Next。
  4. 选中Libraries标签,点击“add Library”添加必要的Junit类库。
  5. 选中Libraries标签,点击“add Library”添加必要的Junit类库。
  6. 选择Junit3,点击Finish,完成类库的添加,如图所示
  7. 点击Finish,完成UnitTest项目的设置,进入项目工作界面。
  8. 在UnitTest上右键,——>New——>Class,弹出添加类窗口。Package中填写cn.edu.zstu,Name中填写Book。(注意大小写)
  9. 在Book类中填充内容如下,完成Book类的编写。
  10. 右键点击UnitTest项目,—>New—>Other,选择Java下的JUnit下的JUnit Test Case,点击Next:
  11. 在Package中填写“cn.edu.zstu”,在Name中填写“BookTest”,在Class under test中填写“cn.edu.zstu”(注意大小写),选中setUp(),teardown()和constructor()三个复选框,点击Next;在弹出的窗口中选中equals成员函数,所完成的BookTest类如图所示。
  12. 为BookTest添加两个私有成员变量private Book book1;private Book book2;
  13. 分别完成setUp()和tearDown()两个成员函数
  14. 编写测试用例函数testEqualsObject(),使用下列两条语句替换fail(“Not yet implemented”);asserFalse(book2.equals(book1));asserTrus(book1.equals(book1));
  15. 点击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三个参数创建三角形对象。

接下来,分析三角形的类型情况:

  1. 不构成三角形:两条边之和小于等于第三边,或任意一条边不为正数;
  2. 构成等边三角形:三条边都相等;
  3. 构成等腰直角三角形:任意两边相等,且两条边的平方和等于第三边的平方和;
  4. 构成等腰三角形:任意两条边相等;
  5. 构成直角三角形:两条边的平方和等于第三边的平方和;
  6. 构成普通三角形:两条边之和大于第三边,且三边均为正数。

针对上述内容,在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类的测试案例中进行实践。

通过本次实验,我进一步学习了软件测试的方法,了解了更为细致的测试过程,有益于日后自己编程开发软件的测试。


本文转载自: https://blog.csdn.net/qq_53229521/article/details/137404048
版权归原作者 阮阮的阮阮 所有, 如有侵权,请联系我们删除。

“软件工程——实验3:软件测试之单元测试”的评论:

还没有评论