这是三个系列文章中的第一篇。

  1. 测试思路
  2. 技术技巧
  3. 工具和提示

心态

测试代码是需要学习的东西。 需要花费时间来吸收如何做好。 这是一种应该始终练习和改进的技巧。

过去,开发人员没有进行测试,而是检查了他们的代码。 这是一个很好的技巧:

检查:代码执行编码人员打算执行的操作。 测试:代码可以执行客户所需的工作。 # 敏捷 #tdd #bdd

—尼尔·基里克(@neil_killick) 2014年11月7日

今天,我们有许多工具和技术可以使用。 XUnit框架,模拟框架,UI自动化,TDD,XP…

但我相信测试始于头脑。 心态。

为什么要测试

我真的应该回答吗?
测试是您的代码工具和质量保证。 测试说明了代码的故事。 他们证明某事有效。 如果出现问题,他们会立即提供反馈。 正确使用测试可以使您更加高效。 您调试的次数更少,可能的bug更少,因此您有更多的时间进行实际工作。 您的设计将会更好(以后会更多)并易于维护。 您有信心更改代码(重构)。 稍后会更多。 由于您对代码更加自信, 因此可以减轻压力

测试什么

我什么都说。 也许您会跳过系统的最底层。 读取/写入文件系统或DB或传达某些外部服务的部分。 但是,即使这些零件也可以测试。 他们应该。 在接下来的博客中,我将介绍一些技巧。

测试最小的东西。 例如,如果您有一个DTO并决定将某个字段初始化为某个值,则进行测试,仅实例化该类,然后验证(确认)期望值(是的,我知道,某些部分确实无法测试,但应保持最小)。

建议零售价

单一责任原则。 这就是我喜欢提到测试需要检查一件事的观点。 如果是单元测试,则应该测试方法/类的一种行为。 应该在不同的测试中测试不同的行为。 如果是更高级别的测试(集成,功能,UI),则适用相同的原则。 测试系统的一个流程。 测试点击。 测试将元素正确添加到数据库,但不能在同一测试中删除。

隔离

隔离测试可以帮助我们准确了解出了什么问题。 开发独立的测试有助于我们一次专注于一个问题。

隔离的一方面与SRP有关。 测试某些东西时,请将测试的代码与其他部分(依赖项)隔离开。 这样,你测试代码的一部分。 如果测试失败,您知道是。 如果您在测试中有很多依赖性,那么很难弄清实际的失败原因是什么。

但是隔离也意味着其他事情。 这意味着没有测试会干扰其他测试。 这意味着测试的运行顺序无关紧要。 对于单元测试,这意味着您不需要运行数据库(或与此相关的Internet连接)。 这意味着您可以同时运行测试,而不会互相干扰(maven完全可以做到这一点)。 如果您做不到(例如:数据库问题),那么您的测试就不会孤立。

测试气味

如果测试难以理解/难以维护,请不要生气! 说:

亲爱的测试人员,非常感谢您帮助我改善代码

如果为测试设置环境太复杂,则可能是所测试的单元具有太多依赖性。

如果在运行被测方法之后,您需要验证许多方面(验证,断言等),则该方法可能做得太多。 该测试可以成为您改进代码的最好朋友

通常,真正复杂的测试代码意味着结构化的生产代码更少。 我通常会看到复杂的测试与未遵循SRP或任何其他DOLID原理的代码之间的相关性。

可测试的代码

这是我的最爱之一。 每当我进行代码审查时,我都会问对方:“您将如何对其进行测试?”,“您如何知道它的工作原理?” 每当我编写代码时,我都会问自己同样的问题。 “我如何测试这段代码?”

以我的经验,始终思考如何创建可测试的代码会产生更好的设计。 该代码“神奇地”具有更多的模式,更少的重复,更好的OOD且行为稳定 。

强迫自己不断测试代码,会让您思考。 它有助于将大而复杂的问题分解为许多(或很少)较小,更琐碎的问题。

如果您的代码是可测试的且经过测试,则您对此更有信心。 对行为充满信心,并有信心改变它。 重构它。

重构

这个项目可以是为什么的一部分。 它也可以是技术的一部分。 但是我决定特别注意它。 重构是TDD周期的一部分(但不仅如此)。 当您进行测试时,您可以确信进行重构。 我认为您在开发时需要“考虑重构”。 类似于“思考如何生成可测试的代码”。 在考虑重构时 ,会进行测试。

重构也是一种心态。 问问自己:“我产生的代码是否足够干净? 我可以改善吗?” (顺便说一句,知道什么时候停止…)

这是有关测试的一系列文章中的第一篇。 以下文章将介绍一些测试技术和方法。

翻译自: https://www.javacodegeeks.com/2014/11/its-all-about-tests-part-1.html

全部关于测试–第1部分相关推荐

  1. locust入门:单机使用locust运行压力测试

    locust的官方文档在这里: http://docs.locust.io/en/stable/ 前置:locust的测试脚本使用为python(若未安装python环境,可以搜索安装python) ...

  2. HA: InfinityStones靶机渗透测试

    文章目录 靶机信息 一.信息收集 1.主机发现 2.端口扫描 3.目录扫描 二.漏洞挖掘 1.访问 192.168.1.108 2.访问 /img 目录 3.访问 https 服务(443)端口 4. ...

  3. HA: Forensics靶机渗透测试

    文章目录 靶机说明: 一.信息收集 1.主机发现 2.端口扫描 二.漏洞挖掘 1.访问靶机 web 服务 2.使用 dirb 进行目录扫描 3.使用 exiftool 提取数据 4.使用 dirb 扫 ...

  4. YOLOv4 资源环境配置和测试样例效果

    YOLOv4 资源环境配置和测试样例效果 基本环境:cuda=10.0,cudnn>=7.0, opencv>=2.4 一.下载yolov4 git clone https://githu ...

  5. 大数据调度平台Airflow(八):Airflow分布式集群搭建及测试

    目录 Airflow分布式集群搭建及测试 一.节点规划 二.airflow集群搭建步骤 1.在所有节点安装python3.7 2.在所有节点上安装airflow 三.初始化Airflow 1.每台节点 ...

  6. 2021年大数据ELK(九):使用VSCode测试分词器

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 使用VSCode测试分词器 一.准备VSCode开发环境 1.打开VSCode ...

  7. [FaceBook]测试、发布和分享小游戏

    FaceBook小游戏 测试.发布和分享小游戏 对于小游戏,您现在可以十分轻松地在本地测试开发版本,自动完成发布流程,以及与团队分享编译版本.本文档会详细说明这些步骤. 通过本地服务器测试游戏 小游戏 ...

  8. [JAVAEE] 使用Postman测试接口

    使用Postman测试接口 HelloController.java package com.example.demo.controller;import org.springframework.we ...

  9. Android 弱网测试(小米手机切换3g和2g)

    Android 弱网测试,目前主要的是4g 弱网的话我们可以使用3g和2g 对app 进行测试 现在以小米手机为例 我们测试不同网络下的加载情况 第一步 第二步 第三步: 然后我们就可以根据不同的网络 ...

  10. JAVA课上动手动脑问题以及课后测试1,2总结

    课堂测试1      像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 "软件" 2    (1)题目避免重复 (2)可定制(数量/打印方式) 设计思路 1)产生两 ...

最新文章

  1. Linux_LVM/Quota
  2. c语言申请字符串动态,【分享】C语言动态长度字符串
  3. Struts1和Struts2的区别和对比
  4. C++ Opengl旋转源码
  5. 用户id生成规则_阿里/网易/美团/58用户画像中的ID体系建设
  6. 菜鸟超级进口大仓618首度亮相!跨境商品也能当日次日达
  7. java内存泄漏案例_寻找内存泄漏:一个案例研究
  8. 用matlab解一维单势垒波函数,一维多势垒结构准束缚态的MATLAB分析计算
  9. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-代码解析...
  10. 44 SD配置-销售凭证设置-定义状态参数文件
  11. 微信第三方平台相关的转发
  12. C语言之浅析网络包解析
  13. 空间里相片批量导入u盘_怎么批量把空间照片保存到u盘
  14. fluidsim元件库下载_模块七FluidSIM软件应用 (1)
  15. sql语句where的执行顺序
  16. Proxyee Down百度网盘高速下载器详细使用教程
  17. 数据结构-指针和结构体
  18. “共码未来”——2022Google开发者大会纪行
  19. Mysql数据库——高阶语句(上)
  20. 苹果设置显示连接到服务器,iPhone升级更新至iOS9后显示连接到iCloud服务器错误现象的解决办法...

热门文章

  1. 16年国庆假期期间兼职所悟
  2. (选择 冒泡 插入 二分 异或)
  3. SpringSecurity授权(访问控制)
  4. python变量的创建过程(内存地址变化)
  5. React中构造函数、reader和函数的调用次数和时机测试
  6. php mysql 编码为utf-8_php连mysql用 utf-8编码乱码怎么办
  7. 阿里云服务器本地连接(windows) 阿里云服务器和本地的磁盘共享数据
  8. cassandra数据备份_Cassandra中的数据建模
  9. java 飞行记录器_Java 11功能– Java飞行记录器
  10. mycat和应用程序集成_企业应用程序集成简介