当前位置:   article > 正文

软件工程——实验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类

  1. package cn.edu.zstu;
  2. public class Book {
  3.     private String title;
  4.     private double price;
  5.     public Book(String title,double price){
  6.         this.title=title;
  7.         this.price=price;
  8.     }
  9.     public boolean equals(Object object){
  10.         if (object instanceof  Book){
  11.             Book book=(Book)object;
  12.             return getTitle().equals(book.getTitle()) && getPrice()==book.getPrice();
  13.         }
  14.         return false;
  15.     }
  16.     public double getPrice(){
  17.         return price;
  18.     }
  19.     public String getTitle(){
  20.         return  title;
  21.     }
  22.     public void setTitle(String title){
  23.        this.title=title;
  24.     }
  25. }

3.2 BookTest类

  1. package cn.edu.zstu;
  2. import junit.framework.TestCase;
  3. public class BookTest extends TestCase {
  4.  private Book book1;
  5.  private Book book2;
  6.  public BookTest(String name) {
  7.   super(name);
  8.  }
  9.  protected void setUp() throws Exception {
  10.   super.setUp();
  11.   book1 = new Book("ES",13.88);
  12.   book2 = new Book("The ES54",11.99);
  13.  }
  14.  protected void tearDown() throws Exception {
  15.   super.tearDown();
  16.   book1 = null;
  17.   book2 = null;
  18.  }
  19.  public void testEqualsObject(){
  20. //  fail("Not yet implemented");
  21.   assertFalse(book2.equals(book1));
  22.   assertFalse(book1.equals(book2));
  23.  }
  24. }

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类

  1. package  cn.edu.zstu;
  2. public class Triangle {
  3.     private double a;
  4.     private double b;
  5.     private double c;
  6.     public Triangle(double a,double b,double c){
  7.         this.a=a;
  8.         this.b=b;
  9.         this.c=c;
  10.     }
  11.     public int what_triangle(){
  12.         if((a+b<=c||a+c<=b||b+c<=a)||(a<=0)||(b<=0)||(c<=0)){
  13.             System.out.println(a+" "+b+" "+c+" 不能构成三角形!");
  14.             return 0;
  15.         }
  16.         else {
  17.             if (a==b && b==c){
  18.                 System.out.println(a+" "+b+" "+c+" 构成等边三角形!");
  19.                 return 5;
  20.             }  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)){
  21.                 System.out.println(a+" "+b+" "+c+" 构成等腰直角三角形!");
  22.                 return 4;
  23.             }else if (a==b||a==c||b==c) {
  24.                 System.out.println(a+" "+b+" "+c+" 构成等腰三角形!");
  25.                 return 3;
  26.             } else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)){
  27.              System.out.println(a+" "+b+" "+c+" 构成直角三角形!");
  28.                 return 2;
  29.             }
  30.             else  {
  31.                 System.out.println(a+" "+b+" "+c+" 构成普通三角形!");
  32.                 return 1;
  33.             }
  34.         }
  35.     }
  36. }

 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

42

等腰直角三角形

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类

  1. package cn.edu.zstu;
  2. import junit.framework.TestCase;
  3. public class TriangleTest extends TestCase {
  4.  private Triangle t1;
  5.  private Triangle t2;
  6.  private Triangle t3;
  7.  private Triangle t4;
  8.  private Triangle t5;
  9.  private Triangle t6;
  10.  private Triangle t7;
  11.  private Triangle t8;
  12.  private Triangle t9;
  13.  public TriangleTest(String name) {
  14.   super(name);
  15.  }
  16.  protected void setUp() throws Exception {
  17.   super.setUp();
  18.   t1=new Triangle(1,2,3);
  19.   t2=new Triangle(1,2,5);
  20.   t3=new Triangle(3,3,3);
  21.   t4=new Triangle(3,2,3);
  22.   t5=new Triangle(4,4,4*Math.sqrt(2));
  23.   t6=new Triangle(3,4,5);
  24.   t7=new Triangle(0,3,3);
  25.   t8=new Triangle(7,6,3);
  26.   t9=new Triangle(-1,9,3);
  27.  }
  28.  protected void tearDown() throws Exception {
  29.   super.tearDown();
  30.  }
  31.  public void testEquals() {
  32.   //fail("Not yet implemented");
  33.   assertEquals(0,t1.what_triangle());
  34.  assertEquals(0,t2.what_triangle());
  35.   assertEquals(5,t3.what_triangle());
  36.   assertEquals(3,t4.what_triangle());
  37.   assertEquals(4,t5.what_triangle());
  38.   assertEquals(2,t6.what_triangle());
  39.   assertEquals(0,t7.what_triangle());
  40.   assertEquals(1,t8.what_triangle());
  41.   assertEquals(0,t9.what_triangle());
  42.  }
  43. }

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类的测试案例中进行实践。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/627468
推荐阅读
相关标签
  

闽ICP备14008679号