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

spock 集成测试

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

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

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

在测试环境中注入存根/模拟是一种作为紧急援助的方式(请参阅最后一段,有更好但更难的方法)。 我们可以通过一个额外的带有@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

spock 集成测试

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

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

相关文章

Stream流的基本使用方法

Stream流的基本使用方法 0.常用方法 在介绍的各种方法中,凡是返回值仍然为Stream接口的为函数拼接方法,它们支持链式调用;而返回值不再为Stream接口的为终结方法,不再支持链式调用。如下表所示: 方法名方法作用方法…

iTerm2主题

iTerm2 最常用的主题是 Solarized Dark theme,下载地址:http://ethanschoonover.com/solarized 下载的是压缩文件,你先解压一下,然后打开 iTerm2,按 Command , 键,打开 Preferences 配置界面,…

包包各部位名称图解_品尝烤肉必备!日本和牛各部位名称中日翻译对照 点餐更轻松...

谈到日本美食,又怎么能少了在全球首屈一指的和牛?但是日本大部分烤肉餐厅里的菜单都是日语,而且肉的部分众多,点餐时一定傻傻分不清,一脸懵逼了!今天小T为大家分享日本和牛肉各部位名称的中日语对照&#x…

Java程序开发三步骤:编写、编译、运行

1.Java语言跨平台原理 1.1Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的 运行环境,是Java 最具吸引力的特性之一。我们编写…

corda_Corda服务的异步流调用

corda如何使流程更快? 如果您与Corda合作已有一段时间,那么您很有可能已经考虑过这一点。 您可以通过以下几方面进行合理的调整以提高性能:事务大小,优化查询并减少整个Flow执行过程中所需的网络跃点数。 在某种程度上&#xff0c…

Powerline专用字体安装_PowerFonts字体库安装_Meslo LG字体安装

文章目录单独下载某个 Meslo LG 字体通过命令方式安装全部 Meslo LG 字体zsh 如果使用主题 agnoster,而该主题依赖于 Powerline,而 Powerline 的正常显示有依赖于字体 Meslo LG,要不然会出现乱码的情况,如下所示:单…

delphi7 中文注释字体_使用nerd-font/font-patcher为字体添加字体图标

Nerd-fonts常用来在终端下显示各种图标,这个项目的github repo下提供了许多Nerd Font字体,图标使用效果如图。由于目前Windows Terminal还不支持设置第二字体,要想使用nerd font就必须替换掉原有字体。Nerd font的github页面下提供了许多常见…

Mybatis框架(待完善)

框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 简而言之&a…

MacOS安装Powerline

文章目录安装卸载查看配置(可以忽略这部分)Powerline 是一款比较酷炫的状态栏工具,可以美化终端和 vim 界面,由 python 开发,目前仅支持 python2.X,由于 python2 和 python3 互不兼容,安装前要了…

充电器用着用着就松了怎么办_手机充电口松动怎么办?

如果手机充不进电,首先要检查充电器是否完好,如果充电器完好才考虑手机充电接口松动的可能性。手机充电口松动时,先换一个充电器试试,好多原装充电器接口挤压或踩压难免变薄,而手机接口长时间充电时抻曳也难免变大&…

jakarta ee_适用于Java EE / Jakarta EE开发人员的Micronaut

jakarta ee城镇中有一个名为Micronaut的新微服务框架。 在本文中,我将从Java EE / Jakarta EE的角度讨论如何冒险使用Micronaut框架。 我是Java EE开发人员,因此使用诸如Eclipse MicroProfile之类的解决方案开发微服务更接近我的专业知识,但是…

mysql(待完善)

下载 https://www.mysql.com/cn/downloads/ 下载步骤 1.MYSQL Comunity(GPL) Downloads 2.MySql Community Server 3.根据自己电脑配置下载 4.直接下载 5.注意安装的密码加密方式 选择 使用旧版密码加密 一定要选择Use Legacy Password Encryption。(备注&#x…

配置 Powerline 到 Vim

只需要在 vim 的配置文件 .vimrc 里面加上以下语句,再重启一下终端就可以啦~ set rtp/usr/local/lib/python2.7/site-packages/powerline/bindings/bash/powerline.shset nocompatible set t_Co256let g:minBufExplForceSyntaxEnable 1 python from po…

c++判断二叉树是否为二叉搜索树_原创 | 好端端的数据结构,为什么叫它SB树呢?...

点击上方蓝字,关注并星标,和我一起学技术。大家好,今天给大家介绍一个很厉害的数据结构,它的名字就很厉害,叫SB树,业内大佬往往叫做傻叉树。这个真不是我框你们,而是它的英文缩写就叫SBT。SBT其…

ide 日志 乱码_IDE日志分析方法pt。 1个

ide 日志 乱码介绍 我认为大多数软件工程师都了解日志的重要性。 它们已成为软件开发的一部分。 如果无法解决问题,我们尝试在日志中查找原因。 对于一些简单的情况,当错误阻止应用程序打开窗口时,这可能就足够了。 您可以在日志中找到问题&a…

.bash_profile vs .bashrc

请参阅:https://joshstaiger.org/archives/2005/07/bash_profile_vs.html

生成ssh证书(windows)

ssh -keygen -t rsa 生成ssh证书 /home/work/.ssh authorized_keys 客户端建立私钥和公钥 在客户端终端运行命令 ssh-keygen -t rsa https://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646346.html https://blog.csdn.net/qq_36667170/article/details/79094257

日志间隔_在日志中搜索时间间隔

日志间隔介绍 这篇文章与我有关日志分析的迷你系列文章间接相关。 最好阅读两个主要部分,以更好地理解我在说什么。 第1 部分 , 第2部分 。 这篇文章描述了我在实现IDE方法时遇到的一个重要问题。 任务描述 当某人使用日志时,通常只需要调查…

如果在iTerm2中复制命令特别卡,就跟慢动作似的,怎么办?

如果在 iTerm2 中复制命令特别卡,就跟慢动作似的。你可以编辑 ~/.zshrc: vim ~/.zshrc增加如下内容: pasteinit() {OLD_SELF_INSERT${${(s.:.)widgets[self-insert]}[2,3]}zle -N self-insert url-quote-magic # I wonder if youd need .ur…

lambda表达式的使用

package com.asx.application.common.utils;import org.junit.Test;import java.util.Comparator; import java.util.function.Consumer;/*** lambda表达式的使用* 1.举例:(o1,o2) -> Integer.compare(o1,o2) ;* 2.格式* ->;lambda操作符 或 箭头操作符* ->…