单元测试中测试用例的设计示例

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2019/10/dan-yuan-ce-shi.html

单元测试是软件开发工程师对软件基本功能模块进行的一种白盒测试,检验软件基本组成单位的正确性,也就是测试业务相关的java代码中的方法。一般情况下,接口声明的业务方法都需要写单元测试的代码,以便在打包部署之前自动执行测试。

测试用例的设计方法

简单路径覆盖

测试时至少需要把代码的不同执行路径都执行一遍,这就是简单路径覆盖原则。如下代码:

    int abs(int num) {
        int abs
        if (num < 0) {
            abs = -num
        } else {
            abs = num
        }
        abs
    }

设计出的测试用例集合,需要把if和else中的代码都分别执行过一遍,才算满足简单路径覆盖原则。

等价类和边界值

等价类

根据不同的执行路径,将模块的输入可以分为不同的等价类。例如以上的示例代码,可以把输入划分为两个等价类:(-∞, 0)和[0, +∞),从每一个等价类中取一个测试用例即可。

所以取两个测试用例 1 和 -1 即可满足要求。

边界值

上面代码的边界值是0,如果对0还不放心,我们可以取第三个测试用例0进行测试。这是对等价类选取测试用例的一种补充。

所以最终使用三个测试用例1、-1、0进行测试即可。

正交排列和正交表

对于多个输入的被测试模块,可以通过正交排列和正交表选取具有代表性的测试用例。模块代码如下:

   int mySum(int a, int b, int c) {
        int aa, bb, cc
        if (a < 0) {
            aa = 0
        } else {
            aa = 1
        }
        if (b < 10) {
            bb = 0
        } else {
            bb = 1
        }
        if (c < 100) {
            cc = 0
        } else {
            cc = 1
        }
        aa + bb + cc
    }

我们先给每个输入参数划分等价类如下:

  • a: (-∞, 0)、[0, +∞)
  • b: (-∞, 10)、[10, +∞)
  • c: (-∞, 100)、[100, +∞)

说明每个参数至少需要选两种值,但是怎样的参数组合才能经济又实惠 呢?

如果将三个输入参数的进行全排列,一共需要2*2*2=8个测试用例。这叫做全面测试,这样的话,测试用例太多,所以需要选取最具代表性的组合才行,可以用正交排列和正交表选取。正交表原理如下:

单元测试中测试用例的设计示例插图

所以对于上面代码,最终选取的测试用例集合为:

*  (-1, -1,  -1)
*  (-1, 11, 111)
*  ( 1, -1, 111)
*  ( 1, 11,  -1)

项目中测试用例的设计

在实际项目中,等价类的划分,可以是具有某同一属性的对象。

例如,某个程序模块是根据用户的类型计算商品邮费,需要输入用户对象:因此我们可以将用户按照类型分为这几个等价类:普通用户、vip用户、访客用户。再分别从这三个等价类中选取一个测试用例即可。

多个输入因素影响的功能模块,可以根据正交排列选取测试用例的组合进行测试。

发表评论