软件测试 | 单元测试 | 用JUnit实现 5种覆盖方式

先解释一下Assert

本质上,是一个封装好的 if 语句.返回值为void.传入形参为 (预期值,待测值,允许误差范围)

调用时,打印错误信息,比如

软件测试 | 单元测试 | 用JUnit实现 5种覆盖方式_第1张图片

对于float类型的形参而言,Δ是必须的.否则调用一个废弃的assertEqual().


一.源码

1.需求:

佣金函数commision(int,int,int);

需求是: commission方法是用来计算销售佣金的需求

有耳机(headphone)、手机壳(Mobile phone shell)、手机贴膜(Cellphone screen protector)三个部件,

每个部件单价为:耳机80元,手机壳10元,手机贴膜8元,每月月末向制造商报告销量,制造商根据销量给销售商佣金。

如果销售额不足1000元按10%提取佣金,1000-1800元部分按15%提取佣金,超过1800元部分按20%提取佣金。

 

2.源代码

package com.company;

//佣金函数
public class Commision {
    float total;    //记录总销售额
    float saraly;   //记录要发的佣金(返回值)

    public float commosion(int headphone, int shell, int protector) {
        if (headphone<0||shell<0||protector<0){
            return (float)-1;
        }

        total = 80 * headphone + 10 * shell + 8 * protector;
        if (total <= 1000) {
            saraly = (float)0.1 * total;
        } else if (total <= 1800 && total > 1000) {
            saraly = 100 + (float)0.15 * (total - 1000);
        } else {
            saraly = 100*(float)0.1+800*(float)0.15+(total-1800)*(float)0.2;
        }
        return saraly;
    }
}

 

 

二.流程图

软件测试 | 单元测试 | 用JUnit实现 5种覆盖方式_第2张图片

 

三.测试用例的编写

1.

1.语句覆盖

路径

要求

测试用例

预期结果

SABDE

total<=1000

(1,1,1)

9.8

SABCFE

1000

(10,30,5)

121.0

SABCGE

total>1800

(100,150,100)

1830.0

测试代码:

@Test   //语句覆盖
public void Commosion_state() throws Exception {
   
//期望值,实际值,允许误差.该断言接收double形参时必加delta,否则调用一个被弃用的断言函数
    assertEquals(9.8, cc.commosion(1, 1, 1), 0.01);
    assertEquals(
121.0, cc.commosion(10, 30, 5), 0.01);
    assertEquals(
1830, cc.commosion(100, 150, 100), 0.01);
}

 

 

 

2.路径覆盖

路径

要求

测试用例

预期结果

SABDE

total<=1000

(1,1,1)

9.8

SABCFE

1000

(10,30,5)

121.0

SABCGE

total>1800

(100,150,100)

1830.0

测试代码:

@Test   //路径覆盖

public void Commosion_path() {

    assertEquals(9.8, cc.commosion(1, 1, 1), 0.01);

    assertEquals(121.0, cc.commosion(10, 30, 5), 0.01);

    assertEquals(1830, cc.commosion(100, 150, 100), 0.01);

}
 
 
 

3.判定覆盖

路径

要求

测试用例

预期结果

SABCGE

total>1800

(100,150,100)

1830.0

 

测试代码:

@Test   //判定覆盖

public void Commosion_dec() {

    assertEquals(1830, cc.commosion(100, 150, 100), 0.01);

}
 
 
 

4.条件覆盖

三个条件B1,C1,C2

 

 

条件

路径

要求

测试用例

预期结果

 

B1=T

SABDE

total<=1000

(1,1,1)

9.8

 

B1=F C1=T,C2=F

SABCGE

Total>1000&&

total>1800

(200,200,200)

3690

 

B1=F C1=F,C2=T

SABCGE

Total<1000&&

total>1800

不存在

---

测试代码:

@Test   //条件覆盖

public void Commosion_con() {

    assertEquals(9.8, cc.commosion(1, 1, 1), 0.01);

    assertEquals(3690.0, cc.commosion(200, 200, 200), 0.01);

}
 
 
 

5.判定/条件覆盖

两个判定B,C.三个条件B1,C1,C2

B=T   B1=T

C=F         C1=T C2=F

判定

条件

路径

要求

测试用例

预期结果

B=T

B1=T

SABDE

total<=1000

(1,1,1)

9.8

B=F,C=T

B1=F,C1=F,C2=T

----

Total<=1000&&

Total>1800

---

---

B=F,C=F

B1=F,C1=T,C2=F

SABCGE

total>1800

(100,150,100)

1830.0

 
 
 
 

@Test   //判定/条件覆盖 public void Commosion_dec_con() {    

assertEquals(9.8, cc.commosion(1, 1, 1), 0.01);    

assertEquals(3690.0, cc.commosion(200, 200, 200), 0.01);

}

6.条件组合覆盖

判定B可能出现的条件组合为:B=T,B=F

判定C可能出现的条件组合为:

C1=T,C2=F

C1=F,C2=T

C1=T,C2=T

C1=F,C2=F

设计测试用例

 

条件

路径

要求

测试用例

预期结果  

 

B=T

SABDE

total<=1000

(1,1,1)

9.8

 

B=F C1=F,C2=T

不存在

total<=1000&&

total>1800

------

------

 

B=F C1=T,C2=F

SABCGE

total>1800

(100,150,100)

1830.0

 

B=F C1=T,C2=T

SABCFE

1000

(10,30,5)

121.0

 

B=F C1=F,C2=F

不存在

Total<=1000&&

Total>1800

------

------

 


 

测试代码:

@Test   //条件组合覆盖
public void ommosion_mul_con() {
    assertEquals(
9.8, cc.commosion(1, 1, 1), 0.01);
    assertEquals(
121.0, cc.commosion(10, 30, 5), 0.01);
    assertEquals(
1830.0, cc.commosion(100, 150, 100), 0.01);

 

你可能感兴趣的:(软件测试,junit,白箱测试)