全部关于测试–第1部分

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

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

心态

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


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

今天,我们有许多工具和技术可以使用。 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

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

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

相关文章

利用数据库创建webservice

http://www.cnblogs.com/yungboy/archive/2011/11/07/2239642.html转载于:https://www.cnblogs.com/mingyongcheng/archive/2012/03/08/2385242.html

ASP.NET AJAX Debugging and Tracing

Moved to http://blog.tangcs.com/2008/09/30/asp-net-ajax-debugging-and-tracing/转载于:https://www.cnblogs.com/WarrenTang/archive/2008/09/30/1302328.html

JS中编码操作

常见的网页设计编码:Unicode的UCS-2 UCS-4 UTF-8 UTF-16 UTF-32以及ASCII和ANSI。 要知道JS最初定稿时使用的编码是UCS-2(因为那时候还没UTF-16,本质:UTF-16就是对UCS-2的扩展,前面的65536个字符就是UCS-2本身&#x…

Apache Commons IO教程:初学者指南

Apache Commons IO是由Apache Foundation创建和维护的Java库。 它提供了许多类,使开发人员可以轻松地完成常见任务,并且减少样板代码 ,而每个项目都需要一遍又一遍地编写此类库的重要性是巨大的,因为它们已经成熟由经验丰富的开发…

MyEclipse 10优化技巧

MyEclipse 10优化速度方案仍然主要有这么几个方面:去除无需加载的模块、取消冗余的配置、去除不必要的检查、关闭更新。第一步: 去除不需要加载的模块一个系统20%的功能往往能够满足80%的需求,MyEclipse也不例外,我们在大多数时候只需要20%的…

为什么应该避免JSF

长期以来,对我来说,JSF只是另一个我不太在乎的Web框架。 这改变了。 在被迫使用了几个月之后,我认为在几乎所有情况下,这都是重大的项目风险。 在这里,我提出此判决的理由。 UI和处理逻辑的纠缠不清。 官方教程声称以…

HTML知识点总结之img、scirpt、link标签

<img>元素 使用<img>可以在网页插入一个图片&#xff0c;但实际上<img>标签并不会在网页中直接插入图像&#xff0c;而是从网页上链接图像。 <img>的主要属性 &#xff08;1&#xff09;src属性&#xff1a;图片的路径。 &#xff08;2&#xff09;alt…

更多 Kinect for Windows 项目揭示

虽然Kinect for Windows的发布不过才过去一个月而已&#xff0c;但是到目前为止这个Xbox 360游戏设备辅助产品似乎已经赶上了一些商业企业项目了。其中包括一个让机器人自动购物车成为现实的项目。在Microsoft Power and Utilities博客 的一篇博文中&#xff0c;微软列举了一些…

CSS3的常用属性(一)

选择器 属性选择器&#xff08;通过标签属性来选择&#xff09; E[attr]&#xff1a; 表示只要元素<E>存在属性attr就能被选中 如&#xff1a; div[class]E[attrval]&#xff1a; 表示元素<E>存在属性attr的值等于val&#xff0c;即可被选中 如&#xff1a; di…

问题集锦

1、viewpager 用到了ViewPager&#xff0c;Android5.0.1&#xff0c;却额外在Build Path中引入了v4jar包&#xff0c;并且在“Order and Export”中勾选了此jar包&#xff0c;编译时出现错误&#xff1a; [2014-09-28 23:49:30 - Dex Loader] Unable to execute dex: Multiple …

ImageField,FileField上传文件命名问题

django 的models.ImageFiled,FileField有属性upload_to&#xff0c;该属性是指定将文件上传到服务器的位置&#xff0c;及存储在哪个文件夹下&#xff0c;你可以很方便甚至很少的代码就可以实现文件上传操作了。 但是默认的存储的文件名是没有改变的&#xff0c;也就是说所存储…

Spring靴子战争包装

Spring Boot建议在构建期间使用嵌入式容器&#xff08;tomcat或码头&#xff09;创建一个可执行jar&#xff0c;并在运行时将此可执行jar作为独立进程使用。 但是&#xff0c;通常将应用程序部署到外部容器上是很常见的&#xff0c;Spring Boot提供了打包应用程序的方式&#x…

递归函数

递归函数实在一个函数通过名字调用自身的情况下构成的。 1 window.onload function() {2 var a factorial;3 factorial null;4 alert(a(4));5 };6 7 /**8 * 叠乘9 * param {叠乘的基数} num n 10 * return {叠乘结果} n*(n-1)*(n-2)*...*1 11 */…

正则表达式及测试工具

1. 正则表达式 正则表达式&#xff1a;一种匹配文本中的字符序列的字符模式。在很多文本编辑器或其他工具里&#xff0c;正则表达式通常被用来检索或替换那些符合某种模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。 一个正则表达式就是由普通字符&…

CCD与CMOS摄像头的区别

首先说一下在闭路电视监控中摄像机的CCD 和CMOS 的结构&#xff0c;ADC的位置和数量是最大的不同。简单的说&#xff0c;CCD每曝光一次&#xff0c;在快门关闭后进行像素转移处理&#xff0c;将每一行中每一个像素&#xff08;pixel&#xff09;的电荷信号依序传入“缓冲器”中…

Java注释教程– ULTIMATE指南(PDF下载)

编者注&#xff1a;在本文中&#xff0c;我们提供了全面的Java注释教程。 Java中的注释是一项主要功能&#xff0c;每个Java开发人员都应该知道如何使用它们。 我们在Java Code Geeks上提供了许多教程&#xff0c;例如创建自己的Java注释 &#xff0c; 带有自定义注释的Java注…

Jquery获取DOM绑定事件

获取到当前正在执行的事件&#xff1a; $(#testDive).bind(click, function(event){alert(event: event.type)}); 获取所有绑定事件&#xff1a; $._data(document.getElementById(testDive), events); 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

laravel中的自定义函数的加载和第三方扩展库加载

一.自定义公共函数 1. 创建文件 app/Helpers/functions.php 2. 修改项目 composer.json 3.运行composer dump-auto 4.OK&#xff0c;然后你就可以在任何地方用到 app/Helpers/functions.php 中的函数了。 二.添加第三方扩展库 1.确定你要放第三方库的目录&#xff0c;比如还是刚…

Java EE 8发生了什么?

Java EE 8的工作进展顺利。 是时候赶上了&#xff01; 无需费力就可以潜入… 不要忘记Java EE 7….. 围绕三个重要主题 HTML 5对齐–用于WebSocket的Java API&#xff08;JSR 356&#xff09;&#xff0c;JSON处理&#xff08;JSR 353&#xff09;&#xff0c;JAX-RS 2.0&…

HDU 1312 Red and Black

这题就是比较水的一道搜索题了&#xff0c;BFS跟DFS都能做&#xff0c;直接看代码吧&#xff01; AC code&#xff1a; View Code 1 #include <iostream> 2 #define MAX 50 3 using namespace std; 4 int w, h; 5 char map[MAX][MAX]; 6 int dir[][2] {{0, 1}, {1, 0},…