Java单元测试杂谈

1.概念

单元测试概念参考百科吧,好的单元测试感觉像空气一样并不存在,但又不可或缺。单元测试遵守AIR原则(摘自《阿里巴巴Java开发手册》,Automatic自动化、Independent独立性、Repeatable可重复)。编写单元测试代码遵守BCDE原则(摘自《阿里巴巴Java开发手册》,Border边界值测试包括循环边界特殊取值特殊时间点数据顺序等、Correct正确的输入并得到预期的结果、Design与设计文档相结合来编写单元测试、Error强制错误信息非法数据异常数据非业务允许输入等录入并得到预期结果)。
单元测试用来保证当前一段代码/接口功能的正确性
保证代码修复、改进或重构之后的正确性
单元测试并不一定保证程序功能是正确的,更不保证整体业务的准确性

2.目的

提高代码质量
减少bug,快速定位bug
放心地修改、重构

3.手段

3.1.mock

Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,创建一个虚拟的对象,以便测试的测试方法
解除测试对象对外部服务的依赖,使得测试用例可以独立运行
提升测试用例的运行速度
提升测试效率
EasyMock:早期比较流行的MocK测试框架
Mockito:
① 生成 Mock 对象
② 定义Mock 对象的行为和输出
③ 执行单元测试
④ 对 Mock 对象的行为和测试结果进行验证
PowerMock:解决static, final, private方法的mock问题和方法内部声明对象的mock问题
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyObect.class})

3.2.打桩

桩,或称桩代码,是指用来代替关联代码或者未实现代码的代码。如果用函数B1来代替B,那么,B称为原函数,B1称为桩函数。打桩就是编写或生成桩代码
隔离:将测试任务从产品项目中分离出来,使之能够独立运行
补齐:用桩来代替未实现的代码
控制:在测试时,人为设定相关代码的行为,使之符合测试需求

3.3.断言

断言是用于判断单元测试执行过程中,是否满足特定的逻辑条件,如果不满足,测试就会“报错”。
assertEquals与assertNotEquals:比较实际的值和用户预期的值是否一样
assertTrue与assertFalse:判断某个条件是真还是假
assertNull与assertNotNull:验证所测试的对象是否为空或不为空
assertSame与assertNotSame:测试预期的值和实际的值是否为同一个参数

4.实例(未完待续)

普通public方法
Final 方法
Private 方法
Static 方法
方法内部声明新对象

你可能感兴趣的:(Java单元测试杂谈)