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

参数化测试(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 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测试基础+参数化测试+模块化_第1张图片

你可能感兴趣的:(软件测试)