使用Spock 1.2简化对遗留应用程序的集成测试

了解如何利用Spock 1.2切片传统应用程序的Spring上下文,编写集成测试。

您是否曾经想过,要开始使用一些遗留应用程序,编写一些测试以了解正在发生的事情,并可能收到有关回归的通知? 当您想实例化单个类时,这种感觉会因NullPointerException而失败。 6替换(有困难)依赖项之后,您以前从未听说过的类仍然存在一些错误。 听起来很熟悉?

有多种技术可以处理隐藏的依赖项。 有整本专门的书(可能还有几本我还没读过)。 有时,从集成测试开始并执行某些过程可能是可行的。 即使只是在我们的情况下完全不需要,查看仅设置上下文所需的奇特组件可能更为“有趣”。 谢谢(太宽和粗心使用) @ComponentScan :)。

在测试环境中注入存根/模拟是一种作为紧急援助的方式(请参阅最后一段,有更好但更难的方法)。 对于想要在其上进行切割的每个依赖项(或实例化的每个不需要的bean),可以使用带有@Primary批注的额外bean定义(通常是在进行此操作之前要三思而后行)的“ bean”定义来“手动”实现。顺便说说)。 @MockBean放在测试中的某个字段上更方便,但是仍然需要在我们的测试中定义一个字段并在其上添加注释(5?10?15 bean?)。 Spock 1.2引入了一些@StubBeans功能, @StubBeans在这里可能有用。

Spock 1.2

它可以用来简单地提供一个类列表,这些类(可能)应在Spring测试上下文中用存根替换。 当然,在实例化实际对象之前(例如,防止在构造函数中使用NPE)。 多亏了这几行存根/模拟注入:

@RunWith(SpringRunner.class) //Spring Boot + Mockito
@SpringBootTest //possibly some Spring configuration with @ComponentScan is imported in this legacy application
public class BasicPathReportGeneratorInLegacyApplicationITTest { //usual approach@MockBeanprivate KafkaClient kafkaClientMock;@MockBeanprivate FancySelfieEnhancer fancySelfieEnhancerMock;@MockBeanprivate FastTwitterSubscriber fastTwitterSubscriberMock;@MockBeanprivate WaterCoolerWaterLevelAterter waterCoolerWaterLevelAterterMock;@MockBeanprivate NsaSilentNotifier nsaSilentNotifierMock;//a few more - remember, this is legacy application, genuine since 1999 ;)//...@Autowiredprivate ReportGenerator reportGenerator;@Testpublic void shouldGenerateEmptyReportForEmptyInputData() {...}
}

可以只替换为一(长)行:

@SpringBootTest //possibly some Spring configuration with @ComponentScan is imported in this legacy application
@StubBeans([KafkaClient, FancySelfieEnhancer, FastTwitterSubscriber, WaterCoolerWaterLevelAterter, NsaSilentNotifier/(, ... */])//all classes of real beans which should be replaced with stubs
class BasicPathReportGeneratorInLegacyApplicationITSpec extends Specification {@Autowiredprivate ReportGenerator reportGeneratordef "should generate empty report for empty input data"() {....}
}

(使用Spock 1.2-RC2测试)

值得一提的是@StubBeans仅用于提供占位符。 在某种情况下,需要提供存根和/或调用验证@SpringBean@SpringSpy (在Spock 1.2中也引入了)更好。 我在以前的博客文章中写了更多有关它的内容 。

有一个重要方面要强调@StubBeans在我们有一些“遗留”项目并希望快速开始编写集成回归测试以查看结果的情况下很方便使用。 但是,正如我的一位同事DarekKaczyński的总结所概括的那样,盲目更换在测试中“爆炸”的豆仅仅是“扫除地毯下的问题”。 在初始阶段之后,当我们开始了解正在发生的事情时,是重新考虑在生产环境和测试环境中创建上下文的好时机。 已经提到过的@ComponentScan太宽泛,通常是万恶之源。 设置部分上下文并将其放在一起(如果需要)的能力是一个很好的起点。 使用@Profile或条件Bean是测试中非常强大的机制(不仅限于此)。 @TestConfiguration和适当的bean选择以改善上下文缓存是值得牢记的。 但是,我从本文开始介绍了Spock中的新机制,该机制在某些情况下可能会有用,并且我想使其简短。 在集成测试中可能还有另一篇更通用的博客文章,关于管理Spring上下文。 我必须认真对待它:)。

翻译自: https://www.javacodegeeks.com/2018/09/integration-testing-legacy-application-spock-1-2.html

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

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

相关文章

Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全

切记:以上方法均会对注册表进行修改,一定要先备份整个注册表,以防万一,避免导致系统错误 一、问题症状或错误复现: 1、首先要打开 文件资源管理器的 文件 预览窗格 2、然后在文件资源管理器的右边就会显示预览窗格…

vue快速修改数组的某个值_详解vue组件三大核心概念

前言本文主要介绍属性、事件和插槽这三个vue基础概念、使用方法及其容易被忽略的一些重要细节。如果你阅读别人写的组件,也可以从这三个部分展开,它们可以帮助你快速了解一个组件的所有功能。本文的代码请猛戳github博客,纸上得来终觉浅&…

根据id获取多维数组路径_程序员的进阶课-架构师之路(2)-数组

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/m0_37609579/article/details/99355842 从这一节开始,我们就要正式进去数据结构的世界了…

自定义条件查询_数据查询不止有vlookup函数,自定义zlookup函数查询操作更高效...

Excel数据查询,相信大家首先会想到vlookup函数。毋庸置疑vlookup函数在Excel数据查询中作用是非常的强大。但是它也有一些不能实现的数据查询。如上图所示,我们需要根据人员的出现次数,提取第N次的数据。这里vlookup函数就无法使用&#xff0…

2021年中国工业互联网行业发展现状分析,“5G+工业互联网”驱动行业快速发展

一、概述 工业互联网是新一代信息通信技术与工业经济深度融合的新型基础设施、应用模式和工业生态,通过对人、机、物、系统等的全面连接,构建起覆盖全产业链、全价值链的全新制造和服务体系,为工业乃至产业数字化、网络化、智能化发展提供了…

针对数能同传SWIPT的个人理解与总结Part1

无线数能同传(Simultaneous Wireless Information and Power Transfer, SWIPT)技术是指利用无线射频信号可同时携载信息与能量的特点,从一个射频信号中同时接收信息与能量的技术。 一、接收机架构 SWIPT有很多种解释,携能通信、…

米筐量化不支持c语言_量化 | 从零开始学量化(三):数据获取途径

本系列的前两篇都是一些笼统的介绍,供小白制定学习计划时参考,现在该铺垫的都铺垫的差不多了。循序渐进,从本篇开始会写一些能实操的内容,尽量写的很细节,有任何问题欢迎私戳。本篇给出一些数据获取途径,基…

射频知识简介

无线通信系统中,一般包含有天线、射频前端、射频收发模块以及基带信号处理器四个部分。随着5G时代的,天线以及射频前端的需求量及价值均快速上升,射频前端是将数字信号向无线射频信号转化的基础部件,也是无线通信系统的核心组件。…

尽可能地做到无服务器,但不止于此

毫无疑问,如果您一直关注技术趋势,那么您会看到“无服务器”的兴起。 在某些情况下,“无服务器”被称为“下一个应用程序体系结构”样式。 我什至听说有人说“您不需要技术X,因为无服务器是未来的方式”或“技术X是红鲱鱼&#xf…

信号扫描_科研必备“武器”之扫描电子显微镜

仪器介绍扫描电子显微镜(英语名称为Scanning Electron Microscope,缩写为SEM),简称扫描电镜。它是一种电子显微镜,利用聚焦电子束扫描样品的表面来产生样品表面的图像。最常见的扫描电镜模式是检测由电子束激发的原子发…

解决office一打开就显示正在更新,过一会就报错的问题

问题描述: 一打开office就显示正在更新,请稍后,过一会就弹窗报错。 解决方案: 1.winR输入services.msc 2.将Microsoft Office即点即用服务设为自动 如果第二步中已经是自动状态,先禁用一下,再重新设置为…

框架如何调用存储过程_如何在FastReport.Net中使用存储过程

在本文中,我们将讨论使用存储过程来检索报表的数据,使用MS SQL示例,将展示如何在报表中创建和使用函数。Transact SQL允许创建存储过程和函数,存储过程用于自动执行任何操作,这些功能旨在扩展查询功能,它们…

Word无法插入公式项目灰色不可用

在我们平时办公或者是论文写作过程中,插入编辑公式是非常常见的操作。但是有时候我们打开Word点击插入发现公式图标为灰色且不可选。接下来我将介绍如何解决。 1、打开文档找到插入公式位置点击插入选项。 2、发现公式符号变为灰色且不可选择。 3、点击左上角的【文…

同源策略为什么可以防csrf_Spring Security 如何预防CSRF跨域攻击?

序言前面我们学习了 spring security 与 springmvc 的整合入门教程。spring secutity整合springboot入门spring security 使用 maven 导入汇总spring security 业界标准加密策略源码详解这一节我们来学习一下 spring security 是如何预防 CSRF 攻击的。拓展阅读web 安全系列-04…

centos移动文件到指定目录_Dynamo批量分离中心文件并另存到指定目录

我们在做项目的时候,为了方便协作,一般都会采用中心文件的方式,但是最终交付的时候,是需要把中心文件分离的,一个一个的分离,感觉还是他麻烦了,于是就想到用Dynamo来批量操作,简单测…

轻松监控Docker容器中的ADF应用程序

在这篇简短的文章中,我将展示一种简单的方法,以确保在Docker容器中运行的ADF应用程序在内存利用率方面是健康的Java应用程序。 我将使用标准工具JConsole,它是计算机上JDK安装的一部分。 如果存在问题(例如,内存泄漏&a…

int型 判断奇偶_XSS(Reflected) 反射型跨站攻击

今天我学习一下反射型XSS。1、low级别打开DVWA网站&#xff0c;先切换到low级别&#xff0c;选择XSS&#xff08;Reflected&#xff09;先查看其源代码&#xff1a;<?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_exists( "…

junit 运行_运行,JUnit! 跑!!!

junit 运行JUnit与JavaScript和SVN一起是程序员经常开始使用的一些技术&#xff0c;甚至没有读过一篇博客文章&#xff0c;更不用说一本书了。 也许这是一件好事&#xff0c;因为它们看起来足够简单并且易于理解&#xff0c;因此我们可以立即使用它们而无需任何手册&#xff0c…

将Host Cobol批次和Monolith Webapps移动到云和微服务

在Amazon Event “从大型机到微服务– Vanguard迁移到云”中非常有趣的演示。 以下部分可用作迁移模式 &#xff1a;如何从大型机迁移到微服务的不同方式&#xff1a; 重新托管 再造 重构 使用Linux和Java重新平台 回购 退役 全部结合 该演示文稿还展示了Vanguard的Cloud…

flutterapp部分手机无法打开_Flutter应用程序在最新更新后无法运行

Environment DetailsWindows VS CodeFlutter 1.17.5 • channel stable • https://github.com/flutter/flutter.gitFramework • revision 8af6b2f038 (3 days ago) • 2020-06-30 12:53:55 -0700Engine • revision ee76268252Tools • Dart 2.8.4Error From Debug ConsoleE…