欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件测试 实验(一) Junit4测试基础+参数化测试+模块化

程序员文章站 2022-07-12 14:06:53
...

参数化测试(Parameters):

为测试程序健壮性,可能需要模拟不同的参数对方法进行测试,如果在为每一个类型的参数创建一个测试方法,呵呵,人都疯掉了。幸好有参数化测试出现了。它能够创建由参数值供给的通用测试,从而为每个参数都运行一次,而不必要创建多个测试方法。注:测试方法(@Test 注释的方法)是不能有参数的。

参数化测试编写流程如下:
  1. 为参数化测试类用@RunWith 注释指定特殊的运行器:Parameterized.class;
  2. 在测试类中声明几个变量,分别用于存储期望值和测试用的数据,并创建一个使用这几个参数的构造函数;
  3. 创建一个静态(static)测试数据供给(feed)方法,其返回类型为Collection,并用@Parameter 注释以修饰;
软件测试 实验(一) Junit4测试基本应用和学习中求三角形面积项目的优化。

一、实验目的

二、实验要求和内容

三、实验步骤

以上与之前的想同,不在重写;

过程:

  1. 本次项目将测试类与被测试类隔离放在两个包里。
  2. 不在测试是否构成三角形,只测试求三角形面积部分。
  3. 将计算不同三角形的面积所使用的不同的方法进行重写,使其拥有不同的作用。
  4. 不在使用大量的text标注,利用参数化测试,简化代码结构。
被测试类代码:
public class calTriArea {
    private boolean judge(double a,double b,double c){//判断是否构成三角形
        boolean flag = false;           
        if(a + b > c && a + c > b && b + c > a){
            flag = true;
        }
        if(a <= 0 || b <= 0 || c <= 0){
            flag = false;
        }
        return flag;
    }

    public double cal(double a,double b,double c) {//计算三角形面积
        double area = -1.0;         
        if(!judge(a, b, c)) return area;
        if(a == b && b == c){
           area = getArea(a);
        }else{           
           area = getArea(a, b, c);
        }
        return area;
    }

    private double getArea(double a){//等边三角形计算
         return Math.sqrt(3) / 4 * a * a ;
    }

    private double getArea(double a,double b,double c){//任意三角形计算
        double p = (a + b + c)/2;
        return Math.sqrt( (p * ( p - a ) * ( p - b ) * ( p - c ) ) );
    }

}
测试类代码:
import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import bzu.hcf.calTriArea;

@RunWith(Parameterized.class)
public class calTriAreaTest {
    private calTriArea calA = new calTriArea();
    private double a,b,c;
    private double exp;

    public calTriAreaTest(double a,double b,double c, double exp) {
        super();
        this.a = a;
        this.b = b;
        this.c = c;
        this.exp = exp;
    }

    @Parameters  
    public static Collection<Object[]> data() {
        Object[][] data = new Object[][]{
            {3,3,3,3.89711431},
            {3,4,5,6.0},
            {2,1,3,-1.0},
            {-2,-1,-3,-1}
        };
        return Arrays.asList(data);
    }

    @Test
    public void test() {
        double res = calA.cal(a, b, c);
        assertEquals(exp,res,0.00001);
    }

}
结果

软件测试 实验(一) Junit4测试基础+参数化测试+模块化