实验三-单元测试1

一、实验目的

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

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

二、实验内容

实验任务 1

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

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

public class File {

public static void main(String[] args) {

// TODO Auto-generated method stub

}

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

import org.junit.Before;
import org.junit.Test;

public class File {
    private static int a;
    
    @Before
    public void init(){
        a = -10;
    }

    @Test
    public void abs(){
        int result;
        result = Math.abs(a);
        System.out.println(result);
    }
}

测试结果

实验任务 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 测试框架,进行测试。

首先给程序添加一个test方法

@Test
public void test(){//增加一个test方法
    System.out.println(getResult());
}

测试add(),通过

add(10);

测试substract(),有bug,与预期输出不符,应为99

substract(-99);

测试multiply(),通过,multiple方法未写好,与预期输出结果相符

multiply(2);

测试divide(),通过

result = 10;
divide(5);

测试square(),通过

square(2);

测试squareRoot(),有bug,程序卡死

result = 10;
squareRoot(2);

实验任务 3

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

import org.junit.Before;
import org.junit.Test;

import java.util.Scanner;

public class sy3 {
    public static int y;

    @Before
    public void init(){
        y = 2100;
    }

    @Test
    public void ifR(){
        if (y % 400 == 0)
            System.out.println(y + "是闰年");
        else if (y % 100 == 0)
            System.out.println(y + "不是闰年");
        else if (y % 4 == 0)
            System.out.println(y + "是闰年");
        else
            System.out.println(y + "不是闰年");
    }

}

实验任务 4

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

import org.junit.Before;
import org.junit.Test;

import java.math.BigDecimal;

public class sy4 {
    public static double a;
    public static double b;
    public static double c;

    @Before
    public void init(){
        a = 10.01;
        b = 3.65;
        c = 7.66;
    }

    @Test
    public void checkTritangle(){//判断三角形类型
        String result = null;

        //BigDecimal不会丢失double的精度
        BigDecimal a1 = new BigDecimal(a);
        BigDecimal b1 = new BigDecimal(b);
        BigDecimal c1 = new BigDecimal(c);

        if(a1!=null&&b1!=null&&c1!=null){

            if(a+b>c&&a+c>b&&b+c>a){
                //乘积
                BigDecimal a2 = a1.multiply(a1);
                BigDecimal b2 = b1.multiply(b1);
                BigDecimal c2 = c1.multiply(c1);

                //先判断直角
                //判断BigDecimal不能用==或者equals,得用compareTo
                if((a2.add(b2)).compareTo(c2) == 0 || (a2.add(c2)).compareTo(b2) == 0 || (b2.add(c2)).compareTo(a2) == 0){
                    if(a1 == b1 || a1 == c1 || b1 == c1){
                        result = "等腰直角";
                    } else {
                        result = "直角";
                    }
                } else if (a1 == b1 && b1 == c1){
                    result = "等边";
                } else if (a1 == b1 || b1 == c1 || b1 == c1){
                    result = "等腰";
                } else {
                    result = "普通";
                }
            } else {
                result = "无法构成三角形";
            }
        }else{
            result = "请检查参数值是否为空或参数值是否正确";
        }
        System.out.println(result + "三角形");
    }
}

三、实验总结

  通过本次软件测试实验,我学习了如何使用junit工具进行单元测试,了解了@Before、@After、@Test等注解的作用和使用方法,对单元测试有了更深的了解和掌握。

posted @ 2022-04-11 14:10  Arisf  阅读(590)  评论(0编辑  收藏  举报