最近两周一直跟公司里面的一些工程师讨论单元测试的价值,是不是只要有端到端的自动测试已经足够。很显然我的观点是都要有,而且要以单元测试为主,为基础。

  持反对意见的工程师觉得因为我们已经有了从页面到数据库的端到端的测试,能够覆盖到系统中各个层次,因此就没有必要再去为每一层中的各个类去写单独的单元测试。我认为可以从几方面来考虑这个问题。

  ● 复杂度上不允许

  很显然为单独一个类写测试,只需要考虑有限的几个情况(当然如果是那种想XXXManager一样的怪兽类,那就是另当别论了),因此测试会比较简单。如果采取端到端的测试,从页面层到数据库至少要涉及十个类。如果采用端到端的测试,每个类方法假设有1个IF语句,也就是有2种情况,为了做到逻辑全覆盖,我们需要测试到2的10次方(1024)种情况。如果我们使用单元测试,首先我们确保每个类的逻辑覆盖,每个类需要2个测试,一共用20个单元测试,然后为了保证能够贯通,我只要在采样几个集成测试(或称为打穿测试)就可以了。因此获得同样的结果,我测试问题复杂度要小得多。如果遇到那种很大的类方法(圈复杂度很高),这更是不可能的任务。

  ● 时间不允许

  另外集成测试的运行时间比较长,一般需要几分钟才能运行完一个用例,因此如果需要运行成千上万个,那反馈也会很不及时。如果反馈不及时,那把测试放到持续集成里面就没有意义了。如果不放到持续集成中经常运行的话,测试就会过时,发臭,最后被抛弃。

  ● 经济上不允许

  一般花很短的时间就可以完成一个单元测试,而完成一个端到端的集成测试则需要花几倍的时间。我见过有测试团队花了几个月的时间完成了几百个测试。仅仅为了一个简单的逻辑,为了逻辑覆盖,就需要写上千个测试,这明显从经济角度也是不可能的。

  ● 问题难以定位

  系统一旦出现问题,由于涉及的类太多,很难一下子确定问题出现的地方。还是需要去Debug。

  因此单元测试对保证系统的内部质量十分关键,但是集成测试,功能测试以及基于页面的测试也是十分必要的。针对不同的测试类型,以及它们之间的关系,Mike Cohn提出了一个测试金字塔

1、最上层的测试主要是作为打穿测试,测试系统的各个部分,各个架构层次是否能够无缝集成。

  2、中间层次是以Fit测试为代表的面向业务的测试,主要测试系统的业务逻辑是否正确,是否在做正确的事情(Do Right Things)。

  3、最下面是开发人员写的测试,主要是控制实现层面,也就是是否正确地做事情(Do Things Right)。

  道理其实跟装配汽车一样。任何公司都不会把汽车完全装配起来再进行测试。通常的做法是先对零件做充分的测试;然后把零件装配成部件,比如车门,发动机,车轮等等,接下来针对部件进行全面的功能测试,测试这些零件组合起来是否能够满足需求;最终才会把汽车装配起来进行整车测试。归根结底我们要兼顾各种测试类型,夯实作为针对软件零件的基础性单元测试,确保每个软件单元都能正常的工作;在更高一个层次尽量使测试覆盖所有业务逻辑;在最上层通过一定数量的基于页面的端到端测试主要保证各部分组件能够顺利集成。

端到端测试 VS 单元测试相关推荐

  1. SAP 电商云 Spartacus UI 的单元测试和端到端测试,以及 CI/CD 相关话题

    单元测试 在项目根目录的 package.json 下面,定义了测试相关的 script: 可以直接 npm run test:libs, 启动所有库的单元测试: 也可以手动执行单个库的单元测试,例如 ...

  2. 全栈测试:平衡单元测试和端到端测试

    全栈开发人员的特点是能够从头到尾交付并发布一个特性.教程和书籍常常侧重于搭建全栈开发环境和让测试能够进行所需要的"管件(plumbing)"(我综合运用了Angular.Rails ...

  3. 自动化测试(二)01-前端测试分为单元测试、集成测试和E2E测试 测试工具对比-适合TDD或 BDD、断言、异步测试 测试工具的类型

    自动化测试(二)01-前端测试分为单元测试.集成测试和E2E测试 & 测试工具对比-适合TDD或 BDD.断言.异步测试 & 测试工具的类型 前端自动化测试 测试是一个庞大的主题,包括 ...

  4. unit单元测试和e2e端到端测试的区别

    前端实现自动化就要借助到unit和e2e端到端测试了 一.unit测试 站在程序员的角度测试 unit测试是把代码看成是一个个的组件.从而实现每一个组件的单独测试,测试内容主要是组件内每一个函数的返回 ...

  5. 测试你的前端代码 - part3(端到端测试)

    本文作者:Gil Tayar 编译:胡子大哈 翻译原文:http://huziketang.com/blog/posts/detail?postId=58d50da37413fc2e8240855c ...

  6. 我与无影的初体验:使用无影云桌面进行一个开源 Angular 项目的端到端测试

    近日很荣幸地收到了阿里云邀请做一个关于阿里旗下无影云桌面的评测,从官网上了解到阿里云无影云桌面原名为弹性云桌面,融合了无影产品技术后更名升级,可广泛应用于具有高数据安全管控.高性能计算等要求的安全办公 ...

  7. 使用.NET Core 编写端到端测试

    什么是端到端测试 端到端测试也称E2E,与单元测试.集成测试.组件测试.契约测试相比,端到端测试的目的是验证整个系统是否满足业务目标,而不管使用的组件架构如何,为了实现这一点,系统被视为一个黑盒子,测 ...

  8. 端到端测试_端到端测试的滥用–测试技术2

    端到端测试 我的上一个博客是有关测试代码方法的一系列博客中的第一篇,概述了使用一种非常常见的模式从数据库检索地址的简单方案: -并描述了一种非常通用的测试技术: 不编写测试 , 而是手动进行所有操作. ...

  9. 端到端测试的滥用–测试技术2

    我的上一个博客是有关测试代码方法的一系列博客中的第一篇,概述了使用一种非常常见的模式从数据库检索地址的简单方案: -并描述了一种非常通用的测试技术: 不编写测试 , 而是手动进行所有操作. 今天的博客 ...

最新文章

  1. Acunetix WVS安全测试软件使用教程(入门级)
  2. c语言回收字符串空间,C语言基础知识(字符串,函数,内存空间)
  3. Boost.MultiIndex 使用重排工具的例子
  4. Form表单中的元素 控件集
  5. 版本控制工具历史的10个里程碑
  6. 策略模式在公司项目中的运用实践,看完又可以涨一波实战经验了!
  7. 低耗时、高精度,微软提出基于半监督学习的神经网络结构搜索算法 SemiNAS
  8. MacOS下搭建Fabric开发环境
  9. 冰点还原精灵如何修改密码
  10. scrapy 官方文档(入门必备)
  11. 框架设计--第三章 Spring AOP--习题答案
  12. eplan中断点编号_eplan中断点怎么关联
  13. Tushare财经数据调取方法(行情数据)
  14. 【Linux内核分析与应用-陈莉君】进程的调度
  15. 无限级分类之递归查找家谱树
  16. 企业上云,打造数字经济新动能|中机智库
  17. C++编写一个求x的n次方的函数(其中n为非负整型)
  18. C++ 实现带监视哨的顺序查找
  19. 第一次面试amp;第一次霸面
  20. python一维数组和二维数组,Python numpy实现二维数组和一维数组拼接的方法

热门文章

  1. 如何删除添加了.css()函数的样式?
  2. 通过按Enter阻止用户提交表单
  3. 枚举的字符串表示形式
  4. U盘怎么重装系统到电脑上
  5. android关闭应用及获取运营商ISP,判断sim卡属于哪个运营商
  6. mysql centos7安装_Linux——CentOS7之mysql5.7安装与配置
  7. MTK:屏幕模板机制
  8. pyinstaller安装_如何打包Python Web项目,实现免安装一键启动?
  9. socket不能bind请求的地址_深入浅出讲解:php的socket通信
  10. 洛谷——P1652 圆