我认为我即将结束有关测试技术的博客系列,感觉好像已经过去了。 对我来说更清楚的一件事是,测试方法仍处于起步阶段,因此是开发人员之间争执或讨论的明确来源,这是一件好事。

我怀疑我们正处于职业发展史上的某个时刻,写作测试学科才刚刚起步,有一天会成为普通的地方,并作为基础编程课程的一部分进行教授(1)。 今天的博客提供了本系列以前的博客中使用的术语的摘要。

单元测试
我在本系列博客的第二部分中介绍了单元测试的定义,并给出了Shane Warden的观点,他在他的《 敏捷开发的艺术》一书中指出,单元测试的运行速度应为“每秒数百”。 迈克尔·费瑟斯(Michael Feathers)在他的《 有效处理旧版代码》一书中指出,在以下情况下,单元测试不是单元测试:

  1. 它与数据库对话。
  2. 它通过网络进行通信。
  3. 它涉及文件系统。
  4. 您必须对环境做一些特殊的事情(例如编辑配置文件)才能运行它。

我还引用了Roy Osherove的话,他在他的《单元测试的艺术》一书中一个很好的单元测试总结为:“自动代码段调用被测试的方法或类,然后检查关于该方法或方法的逻辑行为的一些假设。类。 单元测试几乎总是使用单元测试框架编写的。 它可以轻松编写并快速运行。 它是完全自动化,值得信赖,可读性和可维护性的。”

单元测试可以使用来概括FIRST缩写:快速,独立的,可重复的,自我确认和及时的。

何时使用单元测试
单元测试是测试的基础。 如果您使用的是测试驱动开发(TDD),则在编写生产代码之前要编写失败的测试。 如果您不使用TDD,则至少要在生产代码的同时编写测试,即编写方法,然后编写其测试。 该技术不涉及TDD附带的范式转换,但它比编写所有代码后编写测试要好得多,通常开发人员认为这很乏味。 每个场景都应该有一个测试,将其翻译成简明的英语意味着您代码的每条路径:每个if语句的两端和switch语句的每种情况。 简而言之,每个项目都应具有数百个单元测试,并且您应该确信,如果更改部分代码,则不会破坏某些内容。

存根
存根用于将被测对象与系统其余部分隔离。 它们是被注入到您的对象中以在测试情况下替换实际对象的对象。 马丁·福勒(Martin Fowler)在他的论文《莫克斯不是存根》中将存根定义为:

“存根提供对测试过程中进行的呼叫的固定答复,通常通常根本不响应测试中编程的内容。 存根还可以记录有关呼叫的信息,例如电子邮件网关存根,它可以记住“已发送”的消息,或者仅记住“已发送”的消息数量。”

…从单元测试的艺术中得出的类似定义是:

“存根是系统中现有依赖项(或协作者 )的可控替代。 通过使用存根,您可以测试代码而无需直接使用依赖项。”

cks
模拟是用于模仿或模拟生产对象的行为或角色的替换对象。 这实际上意味着检查被测对象是否按预期调用了模拟对象上的方法,如果没有,则测试失败。 因此,您是在断言方法调用的正确性和通过代码的执行路径,而不是在常规单元测试的情况下断言被测试方法的返回值。

整合测试
集成测试与单元测试相反。 集成测试背后的想法是证明您的对象相互协作以及围绕它们的系统。 套用迈克尔羽毛,集成测试

  1. 与数据库对话。
  2. 通过网络进行通信。
  3. 触摸文件系统。
  4. 要求您对环境做一些特殊的事情(例如编辑配置文件)以运行它。

单元测试领域的Roy Osherove指出,“集成测试意味着将两个或更多或更多依赖软件模块作为一个组一起测试”。 对我而言,这毕竟使定义受到了太多限制,在测试单个模块中的对象时,您可以访问数据库或文件系统,同时确定对象是否可以协作。

在我之前从事的项目中,通常会有一个专门编写用于集成测试的模块。 这是因为集成测试的数量少于单元测试(可能以1:10的比率),并且由于它们访问环境的事实通常要慢得多,因此将所有集成测试合并到自己的Maven模块中意味着他们不必在每次构建模块时都运行,从而加快了构建和开发时间。

端到端集成测试
我已经在本系列的第二篇博客中详细介绍了端到端测试,因此总而言之,可以将它们定义为集成测试的一种特殊情况,因为该测试始于系统边界或刚好位于系统边界之后,并通过系统的所有层。 系统边界或系统边界后面是一个有争议的问题。 对于Spring MVC应用而言,没有理由不应该从控制器代码开始进行端到端测试,而忽略浏览器和调度程序servlet。 毕竟,我怀疑Spring的家伙已经彻底测试了他们的代码,那么为什么还要浪费时间测试它呢? 另外,测试前端看起来像是一整个鱼缸。

(1)我经常怀疑测试技术实际上并没有在拼贴画和大学中教授,但是我没有任何证据。 如果有任何学者可以告诉我,单元测试是受教,受鼓励的,并且是计算机科学学位课程的组成部分,那么我很高兴听到他们的来信。

参考:“ 一些定义–测试技术9”(来自Captain Debug's Blog的 JCG合作伙伴 Roger Hughes)。

相关文章 :

  • 测试技巧–不编写测试
  • 端到端测试的滥用–测试技术2
  • 您应该对什么进行单元测试? –测试技术3
  • 常规单元测试和存根–测​​试技术4
  • 使用模拟的单元测试–测试技术5
  • 为旧版代码创建存根–测试技术6
  • 有关为旧版代码创建存根的更多信息–测试技术7
  • 为什么要编写单元测试–测试技巧8

翻译自: https://www.javacodegeeks.com/2011/12/some-definitions-testing-techniques-9.html

一些定义–测试技术9相关推荐

  1. 9针串口定义测试方法_一些定义–测试技术9

    9针串口定义测试方法 我认为我即将结束有关测试技术的博客系列,感觉好像已经过去了. 对我来说更清楚的一件事是,测试方法仍处于起步阶段,因此是开发人员之间争执或讨论的明确来源,这是一件好事. 我怀疑我们 ...

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

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

  3. 存根类 测试代码 java_有关为旧版代码创建存根的更多信息–测试技术7

    存根类 测试代码 java 在我的上一个博客中 ,我谈到了如何处理行为不佳的不可测试的 (1) SitePropertiesManager 类,以及如何通过提取接口来创建存根. 但是,如果由于旧类的源 ...

  4. 存根类 测试代码 java_为旧版代码创建存根-测试技术6

    存根类 测试代码 java 任何阅读此博客的人都可能已经意识到,目前我正在开发一个项目,其中包含大量的旧代码,这些旧代码庞大,扩展且编写时从未进行过任何测试. 在使用此遗留代码时,有一个行为非常差的类 ...

  5. 您应该对什么进行单元测试? –测试技术3

    昨天我在办公室里,和我的一位同事谈论测试,他对编写单元测试有些不服气. 他使用的原因之一是有些测试似乎毫无意义,这使我想到了什么是单元测试,什么也不需要打扰. 考虑下面一个简单的不可变的Name Be ...

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

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

  7. 为旧版代码创建存根–测试技术6

    任何阅读此博客的人都可能已经意识到,目前我正在开发一个包含大量旧代码的项目,这些旧代码庞大,扩展且编写时从未进行过任何测试. 在使用此遗留代码时,有一个行为异常的类非常普遍,整个团队都一次又一次地犯错 ...

  8. 有关为旧版代码创建存根的更多信息–测试技术7

    在上一个博客中 ,我谈到了如何处理行为不佳的不可测试的 (1) SitePropertiesManager 类,以及如何通过提取接口来创建存根. 但是,如果由于旧类的源代码已被锁定在第三方JAR文件中 ...

  9. 使用模拟的单元测试–测试技术5

    我的最后一个博客是有关测试代码方法的一系列博客中的第四篇,演示了如何创建使用存根对象隔离测试对象的单元测试. 今天的博客探讨了有时被视为对立的技术:使用模拟对象进行单元测试. 同样,我使用了从数据库检 ...

最新文章

  1. Win7环境下搭建GO开发平台——SublimeText 2
  2. 深入浅出Websocket(二)分布式Websocket集群
  3. git 添加用户名和邮箱_设置 Git 账户及邮箱
  4. Xamarin使用ListView开启分组视图Cell数据展示bug处理
  5. 定制Hamcrest Matchers
  6. 素数筛选法(埃氏筛 欧拉筛)
  7. NB朴素贝叶斯理论推导与三种常见模型
  8. 简单易懂的softmax交叉熵损失函数求导
  9. python定义字典对象时_python字典对与list对象组合使用小问题
  10. Carrot2 2.0版中有 Aduna ClusterMap
  11. 9.触摸屏驱动(IIC)移植实战
  12. javase实现银行转账
  13. 某社区APP完整原型案例
  14. 一天一看————以太网交换机的基本原理与配置!
  15. 有才!学生发文言文请假条,老师连称赞
  16. 【读后感1】读《我是一只it小小鸟》有感
  17. Atom处理器喜迎周岁生日 主频达2GHz
  18. Redhat之SSH
  19. android 11.0 12.0第三方输入法app设置系统默认输入法
  20. ubuntu 中比较好用的一些工具

热门文章

  1. SpringMVC 参数校验
  2. SuperMap GIS查询
  3. lambda表达式优化反射_反射选择器表达式
  4. java platform_Java Platform Module系统中的可选依赖项
  5. aws sqs_JMS和AWS SQS的更多高级内容
  6. jcg q8 固件_JCG学院开设了Java设计模式课程!
  7. rest服务swagger_在Java EE 7上骑骆驼–带有Swagger文档的REST服务
  8. 删除已弃用的CMS垃圾收集器的JEP草案
  9. Oracle发布Java 8
  10. couchbase_使用Couchbase分页