单元测试的7种境界

1. 以各种借口拒绝单元测试Unit Test,比较常用的是“你没有足够的时间(进行单元测试)”。

  无论是对单元测试的老手还是新手编写单元测试还是有一定得工作量的,而且单元测试也需要掌握大量的测试框架和工具(光一个junit或testng你很难工作地很happy)。所以在这个阶段开发人员往往会觉得单元测试很难写、很费时,自然而然会使用没有足够的时间(进行单元测试)的借口,其实在这个阶段开发人员需要积极地学习和掌握测试框架和理解单元测试理念。

  2. 尝试单元测试并且立刻开始在自己的博客商鼓吹单元测试和测试驱动开发Test Driven Development的好处。

  开发人员在这个阶段学习很掌握了一些单元测试的工具并在实际工作中加以的运用,并很好的解决了一些问题,意识到了单元测试的价值。我自己也向同事和同学介绍过相关的技术,希望大家对相关的技术能很好的学习和运用,现在回想那个时候对单元测试的技术的掌握和理解都是不完整的,只能说是初窥门径而已。

  3. 单元测试一切。为了能够完成单元测试,而将私有private的方法和属性修改为内部internal;为了达到单元测试覆盖率100%而测试getter() 和 setter() 属性(方法)。

  这样的阶段很明显,特别是遇到private,static方法的测试时会感到很麻烦,所以往往采用了一些不优美的解决方式,目的是能够对相关的方法和类进行单元测试,但没有从根本上意识到是自己的设计有问题,从而导致可测试比较差(testability)。至于对getter和setter 方法进行测试到是没有过,可能只自己所在的公司一直都没有片面的强调过测试100%覆盖率吧。

  4. 无法忍受脆弱的单元测试,在没有弄明白是什么的时候,就匆忙转向“集成测试"。

  单元测试也是代码,只要是代码就会有设计、编码上共同的问题,比如设计模式的运用、重复代码的问题。在无法理解和单元测试中“单元”和“隔离”这两个名词的情况下,会想要通过集成测试来实现单元测试。我自己没有运用过集成测试的工具,但用dbunit直接模拟数据库的情况,从而将多个类“集成”起来测试是这个阶段最常用的单元测试方法。实际上用dbunit直接模拟数据库也是非常脆弱和繁琐的,mocking才是王道。

  5. 发现了一种模拟 mocking 框架,并且乐于使用强制语义(strict semantics)。

  mocking是单元测试中不可缺少的重要组成,Java的单元测试方案中Easymock和Jmock是两个成熟的Mock框架。但 Mocking的学习和理解可能是单元测试工具中最具有难度的地方了,通过运用Mocking你会发觉之前很多工作(比如数据库模拟)都是浪费时间、精力和无效的。

  6. 模拟mock所有可能模拟mocked的对象。

  通过在单元测试中运用Mocking真正贯彻了单元测试的“单元”和“隔离”的原则,不过Mocking是在件繁琐和困难的事情,这时候就需要考虑什么是必须要mock的、什么可以不mock的。

  7. 开始真正有效单元测试。

  恭喜你终于达到了这个阶段,你已经将面向对象设计、设计模式、单元测试、重构等一些技术都融汇到了一起,你终于可以根据自己的意愿编写真正有效的单元测试了。在这个阶段可能你掌握或有了一套测试框架,这套测试框架整合了junit、testng、jmock、easymock、dbunit、xumlunit、unitils等一系列你测试工具使你的编写单元测试效率是之前的3-4倍或者更多

转载于:https://www.cnblogs.com/xmax130/p/4080204.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Yarn 资源调度框架

learn from 从0开始学大数据(极客时间) Hadoop 主要是由三部分组成: 分布式文件系统 HDFS分布式计算框架 MapReduce分布式集群资源调度框架 Yarn Yarn 的架构

python连接sql数据库_python连接SQL数据库

前言 上次通过学习,懂得了如何通过不同的对象来定位页面的元素(id,class_name,tag_name,xpath,css等),可以实现模拟点击的功能。当然,这只是初期的web自动化的一点小成绩。当你觉得这些都应用的差不多的情况下&#xf…

mysql mtop 使用_MYSQLMTOP监控环境搭建

MySQLMTOP是一个由PythonPHP开发的MySQL企业级监控系统。系统由Python实现多进程数据采集和告警,PHP实现WEB展示和管理。最重要是MySQL服务器无需安装任何Agent,只需在监控WEB界面配置相关数据库信息功能非常强大:可对上百台MySQL数据库的状态…

javascript正则表达式入门

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><head><title> RegExp对象</title><script>/*function validation(obj){//1.得到文本框的值//var …

Hive是如何让MapReduce实现SQL操作的?

learn from 从0开始学大数据&#xff08;极客时间&#xff09; 1. MapReduce 实现 SQL 的原理 SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age;实现过程&#xff1a; 2. Hive 的架构 Hive 能够直接处理我们输入的 SQL 语句&#xff08;Hive SQL 语法与 标…

python脚本编程手册_Python 入门指南 — Python2.7 手册 2.7 documentation - 脚本之家在线手册...

Python 入门指南 Release:2.7 Date:December 06, 2014 Python 是一门简单易学且功能强大的编程语言。它拥有高效的高级数据结构&#xff0c;并且能够用简单而又高效的方式进行面向对象编程。Python 优雅的语法和动态类型&#xff0c;再结合它的解释性&#xff0c;使其在大多数平…

mysql spring隔离级别_MySQL事务与Spring隔离级别实现

1、事务具有ACID特性原子性(atomicity)&#xff1a;一个事务被事务不可分割的最小工作单元&#xff0c;要么全部提交&#xff0c;要么全部失败回滚。一致性(consistency)&#xff1a;数据库总是从一致性状态到另一个一致性状态&#xff0c;它只包含成功事务提交的结果隔离型(is…

关闭程序

System.Diagnostics.Process.GetCurrentProcess().Kill();//关闭程序转载于:https://www.cnblogs.com/CandiceW/p/4204564.html

Java JDK 安装配置

文章目录1. 下载安装2. 配置环境变量3. 检查安装成功1. 下载安装 下载地址&#xff1a;https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html&#xff08;需要注册下载&#xff09; 以下操作环境&#xff1a;WIN 10 2. 配置环境变量 JAVA_HOME 为…

mqtt如何判断设备离线_反渗透纯水设备膜元件如何离线清洗?

原标题&#xff1a;反渗透纯水设备膜元件如何离线清洗&#xff1f;在反渗透设备正常运行&#xff0c;无故障时&#xff0c;反渗透系统一般都用在线清洗保养、冲击性杀菌以及定期保护。但是&#xff0c;如果当反渗透膜元件重度污染时&#xff0c;在线清洗就显得无能为力了&#…

mysql的表servers_ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist

修改用户权限&#xff0c;刷新权限表&#xff0c;报1146mysql> flush privileges;ERROR1146 (42S02): Table mysql.servers doesnt existmysql> use mysql;mysql> show tables;可以看到servers表&#xff0c;在系统mysql 目录下&#xff0c;可以看到server.ibd 和serv…

HelloJava,我的第一个Java程序

HelloWorld.java public class HelloWorld { // HelloWorld 需要和文件名一致&#xff0c;因为 public// 一个文件最多一个 public 类// 如果该文件没有 public 类&#xff0c;则文件名随意取public static void main(String[] args) {float i 10.2f;i;//浮点数可以 System.…

python冒泡算法_python_冒泡算法

什么是冒泡算法&#xff1f; -- 像鱼吐泡泡一样&#xff0c;每次都是向上冒出一个水泡 如何逻辑整理&#xff1f; -- 先拿第一个值和剩下的值&#xff0c;一一比较&#xff0c;必能找到最大的或者最小的 -- 比较过程中&#xff0c;第一个值小于剩下的某个值&#xff0c;交换位置…

MongoDB的Java驱动使用整理 (转)

MongoDB Java Driver 简单操作 一、Java驱动一致性 MongoDB的Java驱动是线程安全的&#xff0c;对于一般的应用&#xff0c;只要一个Mongo实例即可&#xff0c;Mongo有个内置的连接池&#xff08;池大小默认为10个&#xff09;。 对于有大量写和读的环境中&#xff0c;为了确保…

Java 变量、数据类型

文章目录1. 变量、常量2. 数据类型1. 变量、常量 final 修饰常量 public class Variable {static final int YEAR 365;// 常量使用 final 修饰, 不可修改&#xff0c;类似C的 conststatic int day 0;// 成员变量public static void main(String[] args){System.out.println…

html背景图不显示_批量显示多张有序排列的图标,使用精灵图CSS Sprites这种办法...

让你显示一个天气图标你会怎么显示呢&#xff1f;让你做一个简单的动图你会怎么采用什么方式呢&#xff1f;让你输出一个长期固定的图标列表你会怎么编写代码呢&#xff1f;如果不管性能&#xff0c;不用css&#xff0c;不用js&#xff0c;可能你会这么写html&#xff1a;<类…

mysql堵塞等级_MySQL 事务隔离级别

前言简单来说&#xff0c;数据库事务就是保证一组数据操作要么全部成功&#xff0c;要么全部失败。在 MySQL 中&#xff0c;事务是在引擎层实现的。原生的 MyISAM 引擎不支持事务&#xff0c;也是为什么 InnoDB 会取代它的重要原因之一。隔离性与隔离级别当数据库上有多个事务同…

水晶报表取消输入密码最后测试结果

哈哈&#xff0c;找了很多资料终于解决了。 //添加引用 using CrystalDecisions.Shared ;//负责解释TableLogOnInfo类 using CrystalDecisions.CrystalReports .Engine ;//负责解释ReportDocument类private void Page_Load(object sender, System.EventArgs e) //然后在水晶报表…

Java 运算符、表达式、语句

文章目录1. 运算符2. 表达式3. 语句1. 运算符 赋值运算 , -, *, /, % 算术运算 , -, !, ~ 一元运算 关系运算 >, <, >, <, , ! 返回布尔 递增&#xff0c;递减--&#xff0c;支持&#xff08;float&#xff0c;double&#xff09;1, -1 逻辑运算 &&…

安装mysql没有提示设置密码_18.04安装mysql没有提示输入密码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼MySQL 5.7不再弹出root密码设置sudo vi /etc/mysql/debian.cnf显示&#xff1a;# Automatically generated for Debian scripts. DO NOT TOUCH![client]host localhostuser debian-sys-maintpassword fPw**********22socket /v…