二、单元测试实践的主要问题

  单元测试有个特点:测试简单独立的代码很容易,但要在实际工作中做好单元测试却很困难。

  根据我们的经验,企业在实施单元测试时,通常会面对四大问题——

  ● 不愿做:程序员没有单元测试习惯。

  ● 没时间:编写测试代码需要耗费大量的时间,项目的周期可能不允许。

  ● 做不了:代码具有较高的耦合性,使单元测试难以进行。

  ● 做不好:测试效果不能令人满意。我们通常会以覆盖率来衡量测试效果,但要实现高标准的测试覆盖很困难。

  三、解决思路和方法

  如何解决上述问题呢?接下来,谈谈一些思路和方法,使用的工具是Visual Unit。Visual Unit,简称VU,是可视化的C/C++单元测试工具。

  3.1 如何解决“不愿做”和“没时间”

  对于“不愿做”,我们采用的对策是可视化,这个可视化,是指程序行为可视,后面我会用案例来演示;对于“没时间”,采用的对策是自动化,通过自动生成测试代码、自动打桩等功能,让测试的时间成本最小化。这两者结合起来,就是ETDD开发模式。

  那么,ETDD是什么呢?

  首先来介绍一下TDD,TDD就是测试驱动开发,这个大家可能听得比较多了。ETDD就是Easy TDD,即:易行版的TDD。ETDD具有以下一些特点:

  ● 可视化,在开发过程中,程序行为可视。

  ● 自动化,除了测试数据需要人工设定外,其他基本上都自动完成。

  ● 现实化,不一定要测试所有代码,在开始阶段,可以只测试功能逻辑复杂的20%代码。

  下面,我用一个案例,讲解一下ETDD的过程:

  假如我要编写一个函数,它的功能是删除字符串左边的空格。

  先写好函数的框架,能通过编译就行。在编写代码前,程序员必须要做的一件事情,是想清楚代码的功能。如果我们想的时候,顺手把它记录下来,就可以让代码的功能更清晰、更明确。

  我们现在来记录代码的功能。这里的记录,不是文字形式的宠统说明,而是数据形式的精确定义,也就是用输入和输出的方式来记录。

  首先,记录最基本的功能,也就是最基本、最常见的输入和输出。输入一个左边有空格的字符串,输出是删除左边空格后的字符串,返回值跟参数的输出是一样的。

 

然后,记录详细的功能。例如,左边没有空格的,全是空格的,还有空字符串。

  把每种输入的正确输出也记录一下。完成了这个工作后,代码的功能就完全定义下来了。

  现在,我们开始编写代码。我的编码思路是这样的:分为两步,第一步计算左边的空格数量;第二步,将非空格的字符向左移动,覆盖掉左边的空格。

  以下几行代码,计算左边的空格,现在编译一下。CTRL+F7。如果编译通过,测试就会自动运行。

  我们可以看到,输入是什么,执行了哪些代码,产生了什么输出。这里,黑色的是当前输入下所执行的代码,未执行的话会显示为红色。这里全是黑色,表示当前输入下执行了全部代码。如果我们想看一下计算左边空格的结果对不对,这是内部的数据,要指定位置后才会打印出来。按ESC键回到开发环境。

 用这种语法可以输出内部数据,适合于程序员开发过程中使用。复杂类型也可以用同样的语法输出。

  另一种输出内部数据的语法是,在左边的代码窗口,在要输出的位置点击一下,右键菜单选择“输出内部数据”,这样填一下就行了。这种方式不会修改产品代码,适合于测试员使用。

  再次执行后,可以看到,左边的空格的数量是4,这是对的,那我们可以继续编写。

  (待续)


本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

单元测试实践的主要问题与解决(2)相关推荐

  1. Java单元测试实践-01.单元测试概述与示例

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. 前言 以下 ...

  2. 蘑菇街支付金融Android单元测试实践

    蘑菇街支付金融Android单元测试实践 2016-04-26  邹勇  移动开发前线 本文为『移动前线』群在4月23日的分享总结整理而成,转载请注明来自『移动开发前线』公众号. 嘉宾介绍 邹勇(网名 ...

  3. Java单元测试实践-24.Gradle执行test任务卡死问题解决

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Gradl ...

  4. JUnit单元测试依赖包构建路径错误解决办法

    JUnit单元测试依赖包构建路径错误解决办法: 选中报错的项目文件夹→右击选择属性(ALT+Enter)→java构建路径→库→添加库→JUnit→选择合适的Junit库版本.

  5. goland go test_Go单元测试实践一,快速上手

    Go单元测试实践二,常见问题 Go单元测试实践三,代码风格 Go 单元测试实践四,集成到gitlabci 前段时间我在团队内推广了单测,为帮助同事快速上手,写了一些文档,这是第一篇, 如果你对单测,G ...

  6. Java单元测试实践-08.Stub、Replace、Suppress静态方法

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Stub. ...

  7. Java单元测试实践-15.Stub、Replace、Suppress Spring的方法

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Stub. ...

  8. Java单元测试实践-09.Mockito的Stub参数条件

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Mocki ...

  9. Java单元测试实践-06.Mock后Stub静态方法

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Mock后 ...

  10. Java单元测试实践-11.Mock后Stub Spring的@Component组件

    Java单元测试实践-00.目录(9万多字文档+700多测试示例) https://blog.csdn.net/a82514921/article/details/107969340 1. Sprin ...

最新文章

  1. 定义和使用含有泛型的方法
  2. flutter进行自动编译操作步骤
  3. 【POJ - 2001 】Shortest Prefixes (字典树,查询重复前缀区间)
  4. 史上最简单的玻尔兹曼机模型讲解
  5. LeetCode(908)——最小差值 I(JavaScript)
  6. Ubuntu18.04安装OpenPCDet及配置spconv
  7. M进制转N进制(C++)
  8. 烽烟通讯2100万限售股将于3月7日疏通流畅上市
  9. 万物皆可python_Python知识点合集,学完万物皆可爬
  10. MyEclipse中用Maven创建Web项目(亲测有效)
  11. java基本数据类型之间的转换
  12. mysql sqlyog命令_SQLyog的基本使用
  13. linux 内核编程视频
  14. shiro框架的简单介绍以及使用(一)
  15. 搭建一个 软件授权码管理系统
  16. SpringBoot 启动时自动执行代码的几种方式
  17. 计算机打表格图,快速填充/微图表/一秒制作打勾方框
  18. 如何将微信公众号上的文章下载下来?
  19. ABB机器人编程随记
  20. 2024清华大学计算机考研信息汇总

热门文章

  1. .NET的托管堆中是否可能出现内存泄漏现象
  2. Hadoop-RPC底层实现与解析
  3. 编译原理:有穷自动机(DFA与NFA)
  4. python操作mysql时mysqldb和pymysql的安装和使用
  5. python变量及其作用域,闭包
  6. java题目青蛙跳杯子_历届试题 青蛙跳杯子
  7. 电脑wifi热点软件_手机WiFi信号太差怎么办?掌握这些方法,轻松解决这个问题...
  8. eclipse java 源代码,java – 下载Eclipse源代码
  9. 数字盲打怎么练_数字键盘区的功能及指法技巧
  10. css 设置文本文字溢出省略号显示