首页 > 技术文章 > 软件测试实验三

linmob 2022-04-19 09:25 原文


 实验项目名称:实验三          

一、     实验目的

1、掌握单元测试的基本理论和作用。

2、掌握典型单元测试工具 JUnit 的使用。

二、  实验内容

实验任务 1

按说明完成一个基本的 JUnit4 测试实例。

实验任务 2

根据说明,建立一个基于 JUnit4 的测试项目,对一个类当中的多个方法进行单元测试,进一步体验一下单元测试的作用和 JUnit 测试的应用。

实验任务3

编写程序判断闰年,设计测试⽤例并⽤Junit进⾏测试。

实验任务4

编写程序判断一般三角形,等腰三角形,等边三角形,设计测试用例并用JUnit进行测 试。

三、  设计思路及结果

实验任务 1

请按以下说明完成一个基本的 JUnit4 测试实例。

首先打开 Eclipse 编译器,创建一个 Java 项目,并在其中创建一个由 File 类构成的程序 File.java,给该类添加一个 abs 方法,作用是返回一个给定整数参数的绝对值。

 

package junit_test;

 

public class File {

       public int abs(int a) {

              if(a>0) {

                     return a;

              }else {

                     return -a;

              }

       }

}

 

然后用JUnit工具对abs方法进行测试。

 

实验任务 2

根据下面的说明,建立一个基于 JUnit4 的测试项目,对一个类当中的多个方法进行单元测试,进一步体验一下单元测试的作用和 JUnit 测试的应用。

首先新建一个项目叫 JUnitTest,我们编写一个 Calculator 类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些 Bug 用于演示,这些 Bug 在注释中都有说明。该类代码如下:

public class Calculator{

private static int result; // 静态变量,用于存储运行结果

public void add(int n) {

result = result + n;

}

public void substract(int n) {

result = result - 1; //故意的Bug,应该是 result =result-n

}

public void multiply(int n) {

} // 假设此方法在项目完成过程中尚未写好

public void divide(int n) {

result = result / n;

}

public void square(int n) {

result = n * n;

}

public void squareRoot(int n) { //求平方根

for (; ;) ; //Bug : 死循环

}

public void clear() { // 将结果清零

result = 0;

}

public int getResult(){

return result;

}

}

将 JUnit4 单元测试包引入这个项目,生成 JUnit 测试框架,进行测试。

package junit_test;

 

import static org.junit.Assert.*;

 

import java.util.Arrays;

import java.util.Collection;

import org.junit.After;

import org.junit.Before;

import org.junit.Ignore;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.Parameterized;

import org.junit.runners.Parameterized.Parameters;

 

import junit.framework.TestCase;

 

@RunWith(Parameterized.class)

public class CalculatorTest {

       private static Calculator calculator = new Calculator();

       private int param;

       private int result;

 

 

       @Before

       public void setUp() throws Exception {

       }

 

       @After

       public void tearDown() throws Exception {

       }

 

       @Test

       public void testClear() {

              result = 0;

              calculator.clear();

              assertEquals(result, calculator.getResult());

       }

      

       @Test

       public void testAdd() {

              result = 3;

              calculator.add(3);

              assertEquals(result, calculator.getResult());

       }

 

       //故意的Bug,应该是 result =result-n

       @Test

       public void testSubstract() {

              result = 1;

              calculator.substract(2);

              assertEquals(result, calculator.getResult());

       }

      

       @Ignore("此方法未实现")

       public void testMultiply() {

              calculator.multiply(0);

       }

 

       @Test(expected = ArithmeticException.class)

       public void testDivide() {

              calculator.divide(0);

       }

      

       @Parameters

       public static Collection data(){

              Object[][] objs=new Object[][]{{-2,4},{0,0},{2,4}};

              return Arrays.asList(objs);

             

       }

      

       public CalculatorTest(int input,int result){

              this.param=input;

              this.result=result;

       }

 

       @Test

       public void testSquare() {

              calculator.square(param);

              assertEquals(result, calculator.getResult());

       }

 

       //Bug : 死循环

       @Test(timeout = 1000)

       public void testSquareRoot() {

              calculator.squareRoot(4);

              assertEquals(2, calculator.getResult());

       }

 

 

       @Test

       public void testGetResult() {

              calculator.clear();

              result = 3;

              calculator.add(3);

              assertEquals(result, calculator.getResult());

       }

}

 

实验任务3

编写程序判断闰年,设计测试⽤例并⽤Junit进⾏测试。

源程序

package junit_test;

 

public class year {

       public String panduan(int year){

              String result = " ";

              if(year%400==0||year%100!=0&&year%4==0){

                     result="闰年";

              }else{

                     result="平年";

              }

              return result;

       }

}

 

 

 

测试程序

package junit_test;

 

import static org.junit.Assert.*;

 

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

 

import junit.framework.TestCase;

 

public class yearTest {

 

       @Before

       public void setUp() throws Exception {

       }

 

       @After

       public void tearDown() throws Exception {

       }

 

       @Test

       public void testPanduan() {

              year y=new year();

              TestCase.assertEquals(y.panduan(2000), "闰年");

              TestCase.assertEquals(y.panduan(1), "平年");

              TestCase.assertEquals(y.panduan(100), "平年");

              TestCase.assertEquals(y.panduan(2004), "闰年");

       }

 

}

 

实验截图

 

实验任务4

编写程序判断一般三角形,等腰三角形,等边三角形,设计测试用例并用JUnit进行测试。

源程序

package junit_test;

 

public class triangle {

       public String panduan(int a,int b,int c){

              String result=" ";

              if(a+b>c&&a+c>b&&b+c>a){

                     if(a==b&&b==c){

                            result="等边三角形";

                     }else if(a==b||b==c||a==c){

                            result="等腰三角形";

                     }else{

                            result="一般三角形";

                     }

              }else{

                     result="不是三角形";

              }

              System.out.print(result);

              return result;

       }

 

}

 

测试程序

package junit_test;

 

import static org.junit.Assert.*;

 

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

 

import junit.framework.TestCase;

 

public class triangleTest {

 

       @Before

       public void setUp() throws Exception {

       }

 

       @After

       public void tearDown() throws Exception {

       }

 

       @Test

       public void testPanduan() {

              triangle t=new triangle();

              TestCase.assertEquals(t.panduan(1,2,3), "不是三角形");

              TestCase.assertEquals(t.panduan(2,2,3), "等腰三角形");

              TestCase.assertEquals(t.panduan(3,3,3), "等边三角形");

              TestCase.assertEquals(t.panduan(4,2,3), "一般三角形");

       }

 

}

 

运行截图

 

 

四、  个人体会

本次学会并练习了Junit测试方法,操作起来比较简单,在后面自己编写源程序有BUG,用测试代码也检测出来了。

推荐阅读