Spring Boot集成测试中@ContextConfiguration和@SpringApplicationConfiguration之间的区别

即使同时使用@ContextConfiguration@SpringApplicationConfiguration批注以及SpringJUnit4ClassRunner来指定如何加载Spring应用程序上下文,它们之间也存在细微的差异。 尽管@ContextConfiguration在加载应用程序上下文方面表现出色,但没有充分利用Spring Boot的功能 。 Spring Boot应用程序最终由SpringApplication(对于JAR而言)或SpringBootServletInitializer加载。 此类不仅加载应用程序上下文,而且还允许记录和加载application.properties或application.yml文件中指定的外部属性以及Spring Boot框架未加载或启用的其他功能。
@ContextConfiguration批注。
简而言之,最好使用@SpringApplicatoinConfiguration批注而不是@ContextConfiguration来编写针对Spring Boot应用程序的集成测试,包括针对网页或应用程序前端的测试。

现在您已经知道在编写Spring引导测试时@ContextConfiguration@SpringApplicationConfiguration批注之间的本质区别,让我们了解一些代码示例的更多细节。

自从Spring 2.5引入SpringJUnit4ClassRunner以来,Spring Framework就为编写集成测试提供了出色的支持,并且对于使用Spring Boot应用程序进行测试也是如此。 在集成测试期间,您还需要加载bean并将它们与依赖项连接起来。

当然,您可以手动执行此操作,但是最好由Spring为您处理,这样做会更好。 它还提供了开箱即用的功能,例如组件扫描,自动装配,声明事务管理,安全性和缓存,这些功能对于在更像生产环境中的测试非常方便。

Spring Boot-@ ContextConfiguration示例

这是一个简单的Spring集成测试,其中包含SpringJUnit4ClassRunner@ContextConfiguration批注,这是用于加载应用程序上下文的基本Spring引导批注之一:

 @RunWith (SpringJUnit4ClassRunner. class )  @ContextConfiguration (classes=BookConfiguration. class )  public class BookServiceTest {  @Autowired  private BookService bookService;  @Test  public void testBookService() { Book aBook = bookService.findByTitle( "Spring Boot in Action" ); assertEquals( "Craig Walls" , aBook.getAuthor()); assertEquals( 40 , aBook.getPrice());  }  } 

如您所见,BookServiceTest类使用@RunWith JUnit注释和@ContextConfiguration注释进行注释。

@RunWith批注是启用Spring集成测试所必需的,这就是我们SpringJUnit4ClassRunnner传递SpringJUnit4ClassRunnner类的原因,而@ContextConfiguration批注指定了如何加载应用程序上下文。

在此示例中,将加载BookConfiguration类中定义的Spring应用程序上下文。

SpringJUnit4ClassRunner是一个功能强大的类,它不仅可以加载应用程序上下文,还可以将bean自动装配到测试中。

例如,在这个测试类中,我们需要一个BookService来测试其findByTitle()方法,并且该bean是由SpringJUnit4ClassRunner类自动注入的,因此我们只剩下编写代码
testBookService()方法。

整合测试

现在,回到@ContextConfiguration ,即使它有助于加载应用程序上下文,它也不会启用日志记录或从application.properties 加载其他属性 ,例如server.port属性,在Spring启动时更改嵌入式tomcat服务器的端口是必需的应用。

要解决该问题,可以使用@SpringApplicaitonCongifguation批注代替@ContextConfiguration ,如下所示:

 @RunWith (SpringJUnit4ClassRunner. class )  @SpringApplicaitonCongifguation (classes=BookConfiguration. class )  public class BookServiceTest {  @Autowired  private BookService bookService;  @Test  public void testBookService() { Book aBook = bookService.findByTitle( "Cloud Native Java" ); assertEquals( "Josh Long" , aBook.getAuthor()); assertEquals( 40 , aBook.getPrice());  }  } 

这个行为与上一个示例相同,但是@SpringApplicationConfiguration还将启用Spring引导日志记录并加载在application.properties或application.yml文件中定义的其他属性。

这就是Spring Boot中@ContextConfiguration@SpringApplicationConfiguration批注之间的区别 。 即使与SpringJUnit4ClassRunner一起使用并帮助加载应用程序上下文,后来的版本还是有用的,因为它还启用了日志记录和其他Spring Boot功能。

最好在为Spring Boot应用程序编写集成测试时使用@SpringApplicationConfiguration ,以使测试尽可能接近生产环境。

感谢您到目前为止阅读本文。 如果您喜欢我对@SpringApplicationConfiguration@ContextConfiguration批注的解释,请与您的朋友和同事分享。 如果您有任何疑问或反馈,请留言。

翻译自: https://www.javacodegeeks.com/2019/02/difference-spring-boot-integration-test.html

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

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

相关文章

vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务

vert.x中断了将近半年后发表了一篇新文章。 在本文中,我们将快速了解如何开始使用vert.x,更有趣的是,如何使用RxJava简化异步系统的编程。 我们将涵盖以下主题: 使用Maven创建一个空的vert.x项目 导入IntelliJ并创建一个简单的H…

如何通过Rultor将Maven工件部署到CloudRepo

在我以前的文章中 ,我描述了如何在Amazon S3中设置私有Maven存储库并通过Rultor进行部署。 如果您熟悉管理Amazon Web Services(AWS), S3和AWS Identity and Access Management(IAM)的话,这是一…

java里面自行车的属性_11、Java基础知识

1、安装jdk,配置环境变量2、public class HelloWorld{publicstatic void main(String[] args){System.out.println(‘HelloWorld’);}}3、编译过程:通过javac编译java文件,生成.class文件,使用java命令运行class文件,注…

布线问题分支限界法java_大型布线:Java云应用程序缺少的技术

布线问题分支限界法java您是否曾经想过,为什么大多数Java框架中的依赖项注入仅用于本地进程内服务而不是分布式服务? 我最近在2013年EMC世界大会上遇到了Paul Maritz的主题演讲 (跳至第32分钟),这使我在云平台的背景下…

Spring Boot微服务,Docker和Kubernetes研讨会–第2部分

在上一篇文章中,我们使用SpringBoot和Docker创建了第一个微服务“ ProductService”。 在这一部分中,我们将详细介绍如何使用Spring Cloud,netflix库,API网关来管理多个微服务。 假设对于我们的订单管理系统,最小关系…

jboss5.1安全性配置_使用Java EE安全性和JBoss AS 7.x保护JSF应用程序的安全

jboss5.1安全性配置企业应用程序的一个常见要求是在登录页面后面保护所有JSF页面。 有时,您甚至希望在应用程序内部具有保护区,只有拥有特定角色的用户才能访问这些保护区。 Java EE标准附带了实现受某些安全性约束保护的Web应用程序所需的所有方法。 在…

分布式事务 camel_使用Camel在Amazon上构建分布式工作流应用程序

分布式事务 camel带有SNS-SQS的管道 工作流由以动态条件确定的特定顺序执行的独立任务组成。 工作流通常代表业务流程,例如电子商务商店中的订单处理步骤。 Amazon Web Services提供了用于构建分布式和可伸缩工作流应用程序的各种工具。 构建此类应用程序的一种方法…

比较Java REST文档框架

确定在记录REST API时选择哪种Java框架可能很麻烦。 在本博文中,我们将简要比较我们自己使用的REST Web服务的三种文档框架,以及它们如何与Spring框架(这是Foreach最常使用的Java框架)集成。 这些是RESTful API建模语言&#xff0…

jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏

原标题:《三国志英杰传》到底是怎样的一款游戏介绍作为PC平台上经典的战棋策略类游戏,英杰传系列可谓把这一类型游戏在战略性和资源获取上的精髓发挥的淋漓尽致。系列初代的《三国志英杰传》诞生在1995年的DOS系统上,虽然我接触英杰传时已经是…

jvm 内存镜像_镜像镜像–使用反射在运行时查看JVM内部

jvm 内存镜像开发人员:Takipi会告诉您何时新代码在生产中中断– 了解更多 我们都习惯于在我们的日常工作中直接或通过利用反射的框架来运用反射。 它是Java和Scala编程的主要方面,它使我们使用的库可以与我们的代码进行交互,而无需对其进行硬…

谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!

有没有想过圣诞老人如何为世界各地的孩子们送上节日礼物? 有20亿个孩子,每个孩子都有自己的愿望清单,他会在24小时内完成。 这意味着每个孩子平均需要43微秒,他需要检查每个孩子是否顽皮或好。 您无需再怀疑了。 我会透露这个秘密…

php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本

$ttime();echo date("Y-m-d H:i:s",$t);第一个参数的格式分别表示:a - "am" 或是 "pm"A - "AM" 或是 "PM"d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"D - 星期几…

play框架配置 拦截器_如何使用Play框架为https配置SSL证书

play框架配置 拦截器我花了几个小时试图使它起作用,最后,问题是我自己没有使用keytool生成CSR(证书请求)。 当我尝试通过https访问Play时,我一直收到此错误: javax.net.ssl.SSLPeerUnverifiedException&a…

matlab 球坐标绘图,MATLAB绘制地图

1使用向量绘制地图1.1绘制全球海岸线向量数据可以表示一个地图。这种向量存在的形式是一系列的经纬度或投影坐标对,它们代表一个点集、一个线条或者多边形。例如,描绘出行政区域边界的点、公路系统、城市的中心或者以上三个集合放在一起,都可…

php 有 stringbuffer,String、StringBuffer、StringBulider三者介绍

三者都实现了CharSequence接口,因此CharSequence可认为是一个字符串的协议接口1.String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁;我们常常定义的时候 S…

php生成网页按钮,JavaScript实现自动生成网页元素功能(按钮、文本等)_javascript技巧...

创建元素的方法:1、利用createTextNode()创建一个文本对象2、利用createElement()创建一个标签对象3、直接利用容器标签中的一个属性:innerHTML-----本质上改该标签容器中的“html代码”,不是我们认为的对象树的操作详解代码:这是…

adf 自动输稿器_在ADF实体PK属性中使用MySQL自动增量PK列

adf 自动输稿器大家好。 继续进行ADF MySQL解决方法系列,今天我们将看到需要做些什么才能将MySQL PK自动增量列与ADF实体PK属性一起使用。 如果使用的是Oracle数据库,则可以使用oracle.jbo.domain.DBSequence以及序列和触发器来立即进行操作。 为简单起…

探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)

最近引起我注意的一个有趣且充满希望的开源项目是Spline ,它是由Absa维护的Apache Spark的数据沿袭跟踪和可视化工具。 该项目由两部分组成:一个在驱动程序上工作的Scala库,该驱动程序通过分析Spark执行计划来捕获数据沿袭,并提供…

高性能mysql 聚簇索引,高性能MySQL笔记-第5章Indexing for High Performance-005聚集索引...

一、聚集索引介绍1.什么是聚集索引?InnoDB’s clustered indexes actually store a B-Tree index and the rows together in the same structure.2.为什么一张表只能一个聚集索引?When a table has a clustered index, its rows are actually stored in …

PHP应用GD2函数填充几何图形,使用GD2函数绘制几何图形(PHP图形图像的典型应用教程4)...

使用GD2函数绘制几何图形(PHP图形图像的典型应用教程4)本篇主要讲解使用GD2函数实现几何图形的绘制,首先我们需要的事创建一个图像,在之前的文章中我们就说过了,创建图像是所有图像操作的第一步,然后再背景上根据坐标点绘制图形轮…