光流法测试代码

本文的这一部分将讨论在开发过程中拥有有效工作流程的影响,以及适当的测试代码质量如何使我们能够创建可维护的测试,尤其是对于复杂项目。

开发工作流程和管道

编程是一项流程活动,我们开发人员应该对保持工作流程高效和缩短周转时间感兴趣,以免因等待时间而分心。

通常,我们要确保测试的总体运行时间不超过几秒钟,至少对于我们在“更改-验证-重复”周期内执行的所有测试而言。 在开发过程中,至关重要的是要对此周期进行快速周转,这涵盖了从对项目进行一些更改到验证这些更改在类生产环境中按预期工作的过程。

如果我们仅通过每次都要从头开始构建和部署我们的应用程序的管道来进行验证,那么这太慢了,无论该管道是否在本地运行。 因此,建议创建一个开发设置来侦听文件更改,然后通过重新部署整个应用程序或更新单个类或文件来修改应用程序以反映我们的代码更改,然后快速重新执行连接的测试方案到更新的被测应用程序。 这个想法是,通常只重新部署应用程序或应用程序的一部分要快得多,而不是从头开始启动流程并保持潜在的其他本地服务运行。 这种方法使本地运行系统测试变得更加有趣,因为我们可以针对正在运行的系统重新执行测试方案,并立即验证我们的更改。

更具体地说,本地工作流可以是: 重新编译类,执行单元测试,(热)部署应用程序以及执行幂等集成测试。 整个周期不应超过一秒或两秒,否则我们的注意力会转移到其他地方。 由于集成测试的启动和执行时间,花费较长时间的系统测试或任何其他更复杂的情况,我们有可能将集成测试划分为执行频率较低或仅在CI / CD管道中运行的单独测试套件。

对于Java Enterprise项目,请查看WAD或Liberty插件开发模式 。

测试代码质量和可维护的测试

导致项目测试不足的最大问题是缺乏可维护的测试代码。 在许多情况下,编写测试,或更确切地说,复制并粘贴测试,使得一旦对生产代码进行了较大的更改,就很难更改它们。 这就是说,通常对测试代码的质量关注较少。 只要测试用例很少,那就很好。 但是,您通常会在项目中看到的是,随着代码库变得越来越复杂,如果我们不应用重构,则测试套件的可维护性就会越来越少,就像生产代码一样。

那就是进行可维护测试的主要目的:应用相同的代码质量原则,尤其是分离关注点并引入抽象层。 如果要注意不要引入泄漏的抽象,那么在您的测试范围内创建可重用的组件是可能的,也是非常明智的选择。

让我们看一个进一步说明这一点的示例。 我们从我有时称为“注释优先编程”开始,在该注释中,我们用代码注释,伪代码甚至在纸上编写代码,测试场景应在纯概念,业务逻辑层面上验证。 例如,“创建尺寸较大Espresso咖啡订单”。 或“验证订单是否在Espresso类型且尺寸较大的系统中 ”。就是这样。 如何创建订单不是该级别的一部分,而是以较低的抽象,单独的方法或通常单独的委托来实现。 对于低级验证也是如此,例如,检查是否已发送回正确的HTTP状态代码和预期的JSON结构。 我们应注意不要将仅在详细级别上相关的信息(例如JSON结构)泄漏给委托方法。

您可以观看此视频,以查看实现该流程的示例流程。 从测试人员或领域专家的角度来看,这种方法非常有意义,因为我们开始的是我们要测试的场景,而不是如何实现它们。 如果实现发生更改,例如与系统的通信从HTTP更改为其他内容,则仅需要调整一个位置。 此外,我们的测试用例方法变得非常易读,因为它们准确表达了要测试的内容的概念; 如果我们对操作方法感兴趣,则会在较低的层次上找到它。

例如,以下系统测试将验证咖啡订单的创建:

 class CreateOrderTest { private CoffeeOrderSystem coffeeOrderSystem; private BaristaSystem baristaSystem; @BeforeEach void setUp() { coffeeOrderSystem = new CoffeeOrderSystem(); baristaSystem = new BaristaSystem(); } @Test void createVerifyOrder() { List<URI> originalOrders = coffeeOrderSystem.getOrders(); Order order = new Order( "Espresso" , "Colombia" ); URI orderUri = coffeeOrderSystem.createOrder(order); Order loadedOrder = coffeeOrderSystem.getOrder(orderUri); assertThat(loadedOrder).isEqualToComparingOnlyGivenFields(order, "type" , "origin" ); assertThat(coffeeOrderSystem.getOrders()).hasSize(originalOrders.size() + 1 ); } ...  } 

即使他们是非技术领域的专家,如果他们不了解Java,也可以了解该测试方案的执行情况,只要他们了解订单咖啡类型产地背后的领域,并且他们是否愿意忽略Java特定的语法。

这就是为什么我声称重点放在测试代码模式而不是特定的测试框架上的原因。 对于实际项目,至关重要的是要引入适当的测试代码质量,主要是设计抽象层并将关注点分离为委托。 特别是当项目变得更加复杂时,这种差异会很快显示出来。

本系列文章的下一部分将介绍测试框架以及何时应用它们。

翻译自: https://www.javacodegeeks.com/2019/10/efficient-enterprise-testing-workflows-code-quality.html

光流法测试代码

光流法测试代码_高效的企业测试-工作流和代码质量(4/6)相关推荐

  1. 如何设计高效测试用例_高效的企业测试-单元和用例测试(2/6)

    如何设计高效测试用例 在本系列的第一部分中,我们看到了有效测试应满足的一些普遍适用的原则和约束. 在这一部分中,我们将仔细研究代码级单元测试和组件或用例测试. 单元测试 单元测试验证单个单元(通常是类 ...

  2. 测试框架 如何测试私有方法_高效的企业测试–测试框架(5/6)

    测试框架 如何测试私有方法 本系列文章的这一部分将介绍测试框架以及我在何时以及是否应用它们方面的想法和经验. 关于测试框架的想法 我对大多数测试框架不太满意的原因是,按照我的观点,它们大多增加了语法上 ...

  3. 高效的磁力搜索引擎 -_高效的企业测试-结论(6/6)

    高效的磁力搜索引擎 - 该系列的最后一部分将涵盖其他端到端测试,生产中的测试以及各部分的结论. 进一步的端到端测试和生产中的测试 除了仅验证单个被测应用程序并模拟外部问题的系统测试之外,我们的管道还必 ...

  4. web安全测试视频课程专题_有关有效企业测试的视频课程

    web安全测试视频课程专题 我已经制作了一些有关有效企业测试的视频. 在实际项目中,我仍然认为该主题非常重要. 这是我在测试Enterprise Java项目中的经验以及一些示例. 1.介绍和有效的M ...

  5. 高效的企业测试-集成测试(3/6)

    本系列的这一部分将展示如何通过代码级以及系统级集成测试来验证我们的应用程序. (代码级)集成测试 集成测试一词有时在不同的上下文中使用不同. 根据Wikipedia的定义,我指的是在代码级别上验证多个 ...

  6. 高效的企业测试-单元和用例测试(2/6)

    在本系列的第一部分中,我们看到了有效测试应满足的一些普遍适用的原则和约束. 在这一部分中,我们将仔细研究代码级单元测试以及组件或用例测试. 单元测试 单元测试验证单个单元(通常是类)的行为,而忽略或模 ...

  7. 高效的企业测试–测试框架(5/6)

    本系列文章的这一部分将介绍测试框架以及我在何时以及是否应用它们方面的想法和经验. 关于测试框架的思考 我对大多数测试框架不太满意的原因是,按照我的观点,它们大多增加了一些语法上的便利性和便利性,但本质 ...

  8. 隐藏画质代码_优秀的模糊测试代码是如何炼成的?

    所谓模糊测试,是指一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法,它经过了近 20 年的发展,早已在程序员圈中成为一种主流漏洞挖掘技术.基于此,开发者们该如何编写良好的模糊测试代 ...

  9. java光流法运动目标检测_基于光流法运动目标检测和跟踪算法.PDF

    第,+ 卷第' 期 东 北 大 学 学 报 ( 自 然 科 学 版 ) 5# (! ,+ ,*#! ' ! " #' 年 ' 月 "#$%&'( #) *#%+,-'.+- ...

最新文章

  1. STAR: ultrafast universal RNA-seq aligner STAR:超快的通用RNA-seq比对器
  2. 散列表查找的一个实例
  3. 电子商城实录------项目目录的结构搭建及其说明3
  4. USB OTG原理+ ID 检测原理
  5. CV:Win10下深度学习框架安装之Tensorflow/tensorflow_gpu+Cuda+Cudnn(最清楚/最快捷)之详细攻略(图文教程)
  6. 真正的模块化Web应用程序:为什么没有开发标准?
  7. 因“智”而治,数据库自动驾驶时代大门即将开启!
  8. 《Python游戏趣味编程》 第9章 贪吃蛇
  9. Twitter OAuth1.0认证过程
  10. 深入java8的集合1:ArrayList的实现原理
  11. win10 右下角输入法乱跳
  12. 51单片机控制动态数码管的显示
  13. angular 自定义打包文件名
  14. 技术型人才如何选择创业?
  15. 查看系统架构是32位还是64位--用Enki学Linux系列(15)
  16. Resistors in Parallel(Gym - 102028E 2018 ICPC 焦作E题 大数+规律C++版)
  17. Google全系列产品不再信任赛门铁克某款根证书
  18. 逻辑覆盖测试用例设计
  19. TK1上如何安装teamviewer,完结
  20. 天龙单机服务器维护,天龙八部网游单机服务器修改资料(Dragon eight online games, single server, modify information).doc...

热门文章

  1. 二分:[BJWC2008]秦腾与教学评估
  2. 在洛谷开了一个邀请赛
  3. OpenJudge1043 树上游戏(换根dp+细节处理)
  4. Educational Codeforces Round 93 (Rated for Div. 2)
  5. 【kruskal重构树】【主席树】werewolf 狼人(P4899)
  6. GDKOI2021总结
  7. 【动态规划】方格取数 (ssl 1010)
  8. 单点登录终极方案之 CAS 应用及原理
  9. 获取一个 Byte 的各个 Bit 值
  10. Maven精选系列--继承与聚合