如何鉴定什么是高质量的测试?首先框定一下Scope,本文所说的测试是面向用户业务需求的测试,写的测试是面向真实业务需求的,站在真实用户的视角去看的。如果你的写测试不是面向真实业务的,就需要你使用用户视角去看问题。什么是用户视角呢?举个例子,当你的系统进行了分层设计,你在测试用户登录功能中的ApplicationService层时,此时,Controller层就是你的用户,你写测试是需要在Controller这个用户的视角去看。
借用中医看人的比方,首先看你的面相、气色、体态,然后再给你把脉,感知你的心跳节奏、脉搏状况。无非是先看外、再探内。一个健康的人应该是内外和谐的。内部气血相通、外部面色红润,再加上体型优雅,大半可以断定这是一个健康的人。
借鉴中医看人的套路来看看什么是高质量的测试。首先,从外形上看,测试命名是要表达业务含义的,测试命名推荐采用能够符合give…when…then三段式格式,另外强烈建议不要采取驼峰命名法,即便你用的Java语言。
外形还没看,再来看测试体,测试题是否三步曲齐全:
- Given:有没有数据准备。
- When:有没有目标调用。
- Then:有没有断言。
具备了基本形状,我们再去看看这些光鲜外表下是否“气血相同”?首先看三步曲是否迈对了:
- Given,是否是用户关注的场景(有没有跟测试名一致),如果不是岂不是 表里不一。
- When,是否正确调用,是否按要求调用,如果不是岂不是 声东击西。
- Then,是否是用户真正关注的结果,如果不是岂不是 挂羊头卖狗肉。
三步曲迈对了,接着可以发出灵魂的拷问:
- 这个测试到底测试的哪个用户需求场景?是真实的用户需求,还是我自己假想的需求。
- 测试用例足够覆盖全所有的用户需求场景了吗?我要不要找BA聊聊看漏了什么场景,要不要找QA问问有没有边界场景没覆盖到。
最后,整体反观所有测试。有一些通用标准。是否有大量重复代码,测试是一等公民,需要你给予足够的重视。
当然,有了上述的诊断方法,不代表你就能写出高质量的测试,要想写出高质量的测试,还需要更多的思考和练习。《有效的单元测试》能够给你不同的视角,激发你的思考。FizzBuzz、GildedRose、Tennis、Args、GuessNumber、MarsRover这些都是很好的练习素材。
另外,测试是敏捷中为数不多、价值连城的活文档,这份文档你一定要坚持写,而且还要写出高质量的内容。
网友评论