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,一经查实,立即删除!

相关文章

【渝粤题库】广东开放大学 秘书理论与实务 形成性考核

👉关注我,看答案👈 选择题 题目:秘书的职责之一是服从上级,既然秘书要服从上级,那么即使发现上级有错误时也不能指出来。 题目:权利人对产品设计、工艺流程、配方、质量管理等方面的技术信息采取保密措施属…

【渝粤题库】广东开放大学 数据库技术安全 形成性考核

选择题 题目:6-1、与大数据密切相关的技术是()。 题目:6-2、大数据应用需依托的新技术有()。 题目:6-3、以下哪个不是大数据的特性()。 题目:6-4、下列哪一项…

【渝粤题库】广东开放大学 PHP动态网站设计 形成性考核

选择题 题目: PHP 服务器脚本由_________分隔符包围? 题目: 下列说法不正确的是____________。 题目: PHP是一种跨平台、____________的网页脚本语言。 题目: PHP网站可称为____________。 题目: PHP…

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

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

java底层编程_万字长文!从底层开始带你了解并发编程,彻底帮你搞懂Java锁!

线程是否要锁住同步资源锁住 悲观锁不锁住 乐观锁锁住同步资源失败 线程是否要阻塞阻塞不阻塞自旋锁,适应性自旋锁多个线程竞争同步资源的流程细节有没有区别不锁住资源,多个线程只有一个能修改资源成功,其它线程会重试无锁同一个线程执行同步…

【渝粤题库】广东开放大学 会展英语 形成性考核

选择题 题目:_______ refers to attaching meaning to sense data and is synonymous with decoding.()。 题目:依据平衡计分卡的思想,把组织的战略分成财务战略、客户战略、内部业务流程战略和 题目:Ameri…

【渝粤题库】广东开放大学 外贸会计 形成性考核

选择题 题目: 在实际业务中,FOB条件下,买方常委托卖方代为租船、订舱,其费用由买方负担。如到期订不到舱,租不到船( )。 题目: 在实际业务中,FOB条件下,买…

java怎么截取后8位数字_java如何更快生成00000000~99999999的8位数字保存到文件中?...

你的代码之所以会这么慢主要因为两个半半点:1:你循环多少次就打开多少次文件。2:你用了String.format("%08d", atLong)你应该先转换成String再用substring来整理....另外半点:你循环多了个0...并且还循环System.out.pri…

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

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

【渝粤题库】广东开放大学 岭南文化概论专科 形成性考核

选择题 题目:中国由北而南最大规模的“移民潮”发生在()代。 题目:位于五岭之一的大庾岭道上的粤北南雄(),是移民入粤的重要中转站。 题目:汉代所置的()郡,管辖番禺.博罗…

【渝粤题库】广东开放大学 建筑施工技术 形成性考核

选择题 题目:以下土料不能用作填方的是()。 题目:在地下水的处理方法中,属于降水法的是()。 题目:在填方工程中,以下说法正确的是()。 题目&#…

java 拉丁文 unicode_“java语言使用的是Unicode编码”是指的jvm?.java文件?

*.java (utf-8/gbk/...) -> *.class (utf-8) -> memory (utf-16)javac 编译中有参数可以制定源代码的编码-encoding Specify character encoding used by source files所以源码用其他编码都是可以的,最常见的是使用UTF-8.See also:在类文件中字符串也是以utf-…

【渝粤题库】广东开放大学 计算机应用基础(本) 形成性考核

选择题 题目:Windows的任务栏可用于________。 题目:Windows中可以设置、控制计算机硬件配置和修改显示属性的应用程序是________。 题目:在Windows中下面的叙述正确的是___________。 题目:计算机可以进行自动处理的基础是______…

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分钟),这使我在云平台的背景下…

【渝粤题库】陕西师范大学164108 网络营销与策划 作业 (高起专)

《网络营销与策划》作业 单项选择题 以下()不是按照检索软件分类的搜索引擎。 A全文数据库检索 B非全文数据库检索 C目录式搜索引擎 D主题指南类检索对于主要基于网站作为信息沟通渠道的公司而言,实施网络营销一般不会涉及(&…

java 类似xamarin_有人有基准(代码和结果)比较在Xamarin C#和Java编写的Android应用程序的性能吗?...

我遇到了Xamarin声称他们在Android上的Mono实现和他们的C#编译的应用程序比Java代码更快。有没有人在不同的Android平台上执行非常类似的Java和C#代码的实际基准来验证此类声明,可以发布代码和结果?于2013年6月18日添加因为没有答案,没有人能…

【渝粤题库】陕西师范大学189101 消费者行为学Ⅰ 作业(高起专)

《消费者行为学Ⅰ》作业 一、单选题 1、人在对刺激物进行组织的过程中往往遵循一系列原则。其中()是指人在对知觉对象或刺激物理解的过程中,有一种将他的各种感知组织成简单的模式的倾向。 A简洁性原则 B形、底原则 C完形原则 D 分类原则 2、…

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

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

【渝粤题库】陕西师范大学200301几何学作业(高起本)

《几何学》作业 一。填空题 1.若|||-|,则矢量,应满足的条件为( ); 2.两矢量,夹角为,则cos( ); 3.平面的法式化方程为( )&a…