高性能Java架构:核心原理与案例实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.9 单元测试

单元测试需关注的点如下:

• 单元测试是持续集成的,即在某次改动之后,之前的单元测试仍然可以使用,本次改动的代码同样需要放置在单元测试中。

• 单元测试不应依赖其他单元测试所返回的数据,单元与单元之间应相对独立。

• 单元测试不应过度依赖外部不确定的资源,例如数据库、外部接口等,最好能够随时运行单元测试,随时知道结果。部分外置接口和资源存在不确定性,可能导致自动化测试断言出现异常,需要费心调整。

• 单元测试的结果应当是真实的,并且有意义,不要为了通过测试而做单元测试。

• 单元测试应在代码覆盖率高的基础上,通过持续集成、自动化测试等,更加方便地了解项目,以及了解新增加的代码对当前项目的影响。

• 在实际工作中单元测试代码通常由开发人员编写,测试人员与开发人员都会对其进行使用,不要把这部分的测试任务完全交由测试人员。基础的单元测试、性能测试与渗透测试应当由开发人员自身先审查。

• 单元测试的代码重要程度与源码相同,不要因为单元测试放在了不同的文件里而去随意命名,这会导致许多测试在不加管理之后变得完全看不懂。

下面介绍单元测试用例的设计方法。

1.9.1 等价类划分

等价类划分指的是一种典型的、重要的黑盒测试方法,它可以解决如何选择适当的数据子集来代表整个数据集的问题。它通过降低测试的数目实现“合理的”覆盖,以此发现更多的软件缺陷,在统计好数据后,再对软件进行改进升级。

等价类划分的方法是把程序所有可能的输入数据(有效的和无效的)划分成若干等价类,然后从每部分中选取具有代表性的数据当作测试用例进行合理的分类。测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例的完整性和代表性。

利用这一方法设计的测试用例可以不考虑程序的内部结构。以需求规格说明书为依据,选择适当的典型子集,认真分析和推敲说明书中的各项需求,特别是功能需求,要尽可能多地发现错误。等价类划分是一种需要系统性输入测试条件的方法。

由于等价类划分是在需求规格说明书的基础上划分数据的,不仅可以用来确定测试用例中数据输入、输出的精确取值范围,还可以用来准备中间值、状态和与时间相关的数据及接口参数等,所以在系统测试、集成测试和组件测试中,在有明确的条件和限制的情况下,利用等价类划分可以设计出完备的测试用例。这种方法可以减少设计一些不必要的测试用例,因为这种测试用例一般使用相同的等价类数据,使测试对象能够得到同样的反应和行为。

等价类划分可分为两个主要步骤,即划分等价类型和设计测试用例。有效等价类数据集的示例如下:

• 终端用户输入的命令。

• 与最终用户交互的系统提示。

• 接受的用户文件的名称。

• 提供初始化值和边界等。

• 提供格式化输出数据的命令。

• 图形模式(比如在鼠标单击时)提供的数据。

• 失败时显示的消息。

无效等价类数据集的示例如下:

• 在一个不正确的地方提供值。

• 验证边界值。

• 验证外部边界值。

• 用户输入的命令。

• 最终用户与系统交互的提示。

• 验证与边界和外部边界值的数值数据。

等价类划分的示例如下:

• 按区间划分。

• 按数值划分。

• 按数值集合划分。

• 按限制条件或规划划分。

• 按处理方式划分。

1.9.2 边界值分析

边界值分析就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常来说,边界值分析是对等价类划分的补充,在这种情况下,其测试用例来自等价类的边界。

实际上,大量的错误都发生在输入或输出范围的边界上,而不是发生在输入或输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。

与等价类划分的区别如下:

• 边界值分析不是从某等价类中随便挑一个作为代表,而是等价类的每条边界都要作为测试条件。

• 边界值分析不仅要考虑输入条件,还要考虑输出空间产生的测试情况。

边界值分析的示例如下所示:

• int、long等数值类型的边界。

• string最大长度或最小长度的边界。

• 数据返回第一行和最后一行的边界。

• 数组元素第一行和最后一行的边界。

• 屏幕像素点最上方、最下方、最左方、最右方的边界。

• 做除法后无限循环的最后一位是否限制。

1.9.3 错误推测法

错误推测法指在测试程序时,可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。错误推测法的示例如下:

• 姓名处是否可以输入空白字符串或null等。

• 手机号、身份证号的正确性验证。

• 性别、年龄处是否可以输入不合法字符。

• 正常程序只能登录一个账号,当前程序是否可以打开多个页面分别登录不同的账号。

• 手机和Web在秒杀系统高并发的设计下是否只有一个终端可以进行抢购。

• Web与App是否构建了良好的防抓包、防爬虫处理。

除此之外,单元测试用例的设计方法还有因果图法和正交表分析法。因果图与流程图相似,它以图解的方式表示输入的各种组合关系,从而设计相应的测试用例。正交表分析法指将测试用例的影响因子制作成二维表结构的正交表。