单元测试,测试什么?

简介:

我们一直强调单元测试的重要性,但是有一个问题可能没有认真去想过,测试是重要的,但是我们测试什么呢?最近重读《单元测试之道》,书中给出了答案:Right-BICEP

1.Right——正确

很显然,如果代码运行的结果与你预期的不符合,那么这段代码肯定是有问题的。需要注意的是,Right并意味着正确,因为正确只是相对你所期望的结果而言,而对于用户需求也许就是错误的。

2.B——边界条件
寻找边界条件是单元测试最有价值的工作之一,因为bug一般出现在边界条件上,你常常需要考虑下面这些边界条件:
1)完全伪造或者不一直的数据进行输入
2)格式错误的数据,比如错误的URL,Email地址
3)空值或者不完整值,比如0,null
4)与常理相去甚远的数据,比如人有10000岁?
5)如果要求传入的是一个不允许重复数据的list,你传入一个有重复数据的看看出现什么情况
6)如果需要传入的有序的集合,你传入一个无序的看看结果
7)不按照次序地执行,比如未登录就尝试操作某功能等
对于边界条件,可以按照CORRECT的顺序去尝试:
Conformance——一致性,值是否和预期的一样
Ordering——顺序性,值是否如预期的那样,有序或者无序
Range——区间性,值是否处于合理的范围内
Reference——引用,值是否引用了代码无法空值的外部资源
Existence——值是否存在,为空?为0?不在集合内?
Cardinatity——基数性,检查你的函数能否正确地计数,不多不少
Time——所有的事件的发生是否按照预期的顺序,性能上满足要求?

3.Inverse——检查反向引用
如果方法导致某个结果,尝试以另一个方法能否返回最初的状态?与原状态是否符合预期?

4。Cross——交叉检查
通过不同的方法检查一个方法产生的结果是否正确,比如用Math.sqrt方法检查自己编写的求平方根的方法是否正确。另外的方式,以一种数量去检查另一种数量,比如图书馆借出的书加上架上的书的总数是固定,可以用借出的书来检查架上的书的数量是否正确。

5.E——强制错误条件的产生

一般我们所能想到的环境因素:
1)内存耗光
2)磁盘用满
3)时钟出问题
4)网络不可用或者有问题
5)系统过载
6)调色板颜色数目有限
7)显示分辨率过高

再比如JDK版本差异,我就为这个问题头痛过:)

6.Performance——性能
每天或者每隔几天运行一下一个粗糙简单的性能测试,能够保证你不会在给用户演示的时候出现尴尬的场面。

尽管书上是讲了这么多测试这个、测试那个,我想真实的项目场景中应该根据需要采取特定的测试策略,比如你总不能对于一个单机应用需要考虑地震震断海底光缆引发的问题。就我自己而言,因为项目组中似乎只有我对JUnit等单元测试工具充满兴趣,有经验的老程序员是自己写一个带Main方法的Test类进行测试,而更多的人根本就不知道单元测试或者知道也不感兴趣,在没有压力的情况下,要求自己考虑这么多的测试内容,难矣。今天试用了下NUnit,感觉比JUnit难用多了,JUnit与Eclipse的结合非常简便。

文章转自庄周梦蝶  ,原文发布时间5.17

目录
相关文章
|
10天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
16 0
|
6天前
|
缓存 自动驾驶 测试技术
如何进行有效的Apollo测试:单元测试和集成测试指南
如何进行有效的Apollo测试:单元测试和集成测试指南
34 13
|
1月前
|
Java 测试技术
单元测试编写可测试代码
单元测试编写可测试代码
19 2
|
2月前
|
测试技术 Python
Python中的单元测试与测试驱动开发(TDD)实践
Python中的单元测试与测试驱动开发(TDD)实践
|
2月前
|
缓存 测试技术 持续交付
工程化测试:Apollo的单元测试与集成测试指南
工程化测试:Apollo的单元测试与集成测试指南
|
3月前
|
测试技术 持续交付
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(下)
|
3月前
|
测试技术
探索单元测试和 E2E 测试:提升软件质量的关键步骤(上)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(上)
探索单元测试和 E2E 测试:提升软件质量的关键步骤(上)
|
3月前
|
测试技术 开发者 Python
Python自动化测试与单元测试框架:提升代码质量与效率
在软件开发过程中,测试是不可或缺的环节。Python作为一门广泛应用的编程语言,拥有丰富的自动化测试和单元测试框架,例如unittest和pytest。本文将介绍Python自动化测试的重要性,并深入探讨这两个主流的单元测试框架的特点、使用方法以及优势。通过学习和应用这些框架,开发者可以提高代码质量、提升开发效率,并确保软件在不断迭代中保持稳定。
|
3月前
|
测试技术 Python
Python自动化测试与单元测试框架
自动化测试在软件开发中扮演着重要的角色,可以减少人工测试的时间和成本,提高软件质量。而Python作为一种流行的编程语言,其丰富的库和框架可以让测试变得更加容易和高效。本文将介绍Python自动化测试和单元测试框架,包括unittest和pytest的使用方法、优点和缺点,以及如何根据项目需求选择合适的框架。