集成测试与单组件测试所覆盖的功能具体有哪些区别?
这个题目,听起来没什么需要深入探讨的,但就在最近,我所在团队的同学就遇到了理解偏差。
背景是这样的,组件测试、集成测试分别是不同的同学负责,双方测试完毕后,一起碰测试覆盖面的时候,出现了分歧。
小强同学负责的组件本身是非常独立的一个系统,其他服务只会调用它,它不会去调用其他的组件,并且该组件本身的功能也比较单一,以API的形式,提供号码生成功能。
小强同学向做集成测试的小王同学,请教集成测试相比较组件测试,他们更关注的测试点。因为在小强同学看来,对于他负责的组件A,集成测试的意义并不大。
小王同学的回答是,集成测试主要测试连通性,对于这个回答,小强同学是不满意的,小强同学继续追问,具体是哪些功能的联通?如果只是测试联通,那么只要调用符合组件的规范那么一定是通的呢!这又有什么值得单独做集成测试呢?
小王的观点是,因为A是API服务,直接测试使用的是Postman,集成测试是完全模拟真实的调用方式(比如java代码),两者还是有区别的。
小强更疑惑了,一个API服务起好了,具体是使用哪种语言调用,与该服务的正确性有什么关系?
实际上,任何语言都可以调用,只需要遵循每种语言的语法规则、以及服务的接口参数要求即可。
从上面的描述可以看出,小王同学并没有理解清楚集成测试的真正目的。
首先,并非所有的功能都需要集成测试,比如上述小强同学负责的组件,单组件测试就是集成测试,因为它自成体系。
其次,集成测试关注的点一定是单组件测试无法覆盖的,比如:
组件A必须通过组件B才能生效,A不能对外单独提供服务,这时候需要做A、B的集成测试。
再比如A组件虽然功能独立,但是最终功能生效需要经过组件B、C,需要依据最终的生效情况才能确定A组件的正确性,这时候就需要做A、B、C的集成测试。
再比如A组件功能不独立,需要依赖B组件的功能,只有B功能可用,A才可用,那么就需要做A、B的集成测试。
回到最初小强同学的疑问,假如待集成测试的组件有三个A,B,C,由于A自成体系,谁也不依赖,对外提供特定的的服务,因此A不需要做集成测试,而如果B,C依赖A,那么组件B,C需要与A做集成测试。
你有没有发现,最终的效果是三者都在集成测试中出现了,但是我们要知道他们为什么要出现,单考虑A,是不需要做集成测试的。
技术精进是一场修行,相信自己和时间的力量。
点“在看”你懂得