Spring Boot Sping Boot 测试类是否可以重用应用程序上下文以加快测试运行?

n8ghc7c1  于 2022-11-05  发布在  Spring
关注(0)|答案(5)|浏览(174)

@ContextConfiguration位置属性对于Sping Boot 集成测试没有意义。是否有其他方法可以跨多个使用@SpringBootTest注解的测试类重用应用程序上下文?

woobm2wo

woobm2wo1#

是的。实际上这是默认行为。链接指向SpringFramework文档, Boot 在后台使用它。
顺便说一句,默认情况下,当@ContextConfiguration也被使用时,上下文也被重用。

hc2pp10m

hc2pp10m2#

对于像我一样从谷歌登陆的人:
如果您的Maven surefire插件中有<reuseFork>false</reuseFork>,那么您的上下文就不可能被重用,因为您实际上是在为每个测试类生成一个新的JVM。
Spring文档中对此进行了详细说明:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-ctx-management-caching

cmssoen2

cmssoen23#

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)

上面的注解说明加载了完整的上下文,并且在测试中使用了相同的上下文。这意味着它只加载了一次。
Sping Boot 提供了一个@SpringBootTest注解,当您需要Spring Boot特性时,它可以用作标准spring-test @ContextConfiguration注解的替代方法。

ia2d9nvy

ia2d9nvy4#

如果您从Google登录到此处,并且遇到了启动多个应用程序上下文的问题,请注意:
确保当你多次使用@SpringBootTests时,你使用的是相同的属性。例如,如果你有一个测试只使用@SpringBootTest,而另一个使用@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT),那么每个测试都将启动它自己的上下文!
最简单的方法是在每个集成测试中扩展一个BaseIntegrationTest类,并将@SpringBootTest注解放在该基类上,例如:

package com.example.demo;

import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public abstract class BaseIntegrationTest{
}
ffscu2ro

ffscu2ro5#

对我们来说,@ConfigurationPropertiesScan引起的问题出现在一个测试中,而其他测试中没有。RoshanKumar的answer提供了一个线索。

相关问题