一尘不染

通过所有SpringBootTest使用一个Spring Boot上下文

spring-boot

我希望能够通过使用junit的测试通过不同的类来缓存应用程序上下文。

测试类以这种方式声明:

@SpringBootTest
@RunWith(SpringRunner.class)
public class SomeIntegrationTest {
}

我看到了这个问题,可以跨junit测试类重用spring应用程序上下文,但是在这种情况下,我不使用任何xml,而是要完全启动上下文,而不仅仅是从它中获取几个bean,因此如果我做对了,它@SpringBootTest比xml更合适@ContextConfiguration


阅读 2979

收藏
2020-05-30

共1个答案

一尘不染

Ruslan,所以您的问题是如何为JUnit Suite重用Spring Boot Context,对吗?

然后,它几乎是开箱即用的,您只需要使用注释为每个单元测试添加@SpringBootTest注释。

还要确保您的主@SpringBootApplication类正在加载所有必需的@Configuration类,如果@SpringBootApplications在所有配置类上方的根包上,并且继承了该类,则将自动加载所有必需的类@ComponentScan

从Spring Boot Testing文档中:

Spring Boot提供了一个@SpringBootTest注释,@ContextConfiguration当您需要Spring
Boot功能时,该注释可以用作标准spring-test
注释的替代方法。注释通过创建通过SpringApplication在测试中使用的ApplicationContext来起作用。Spring
TestContext框架将应用程序上下文存储在静态缓存中。这意味着上下文实际上是存储在静态变量中的。换句话说,如果测试在单独的进程中执行,则将在每次测试执行之间清除静态缓存,这将有效地禁用缓存机制。为了从缓存机制中受益,所有测试必须在同一进程或测试套件中运行。这可以通过在IDE中以组的形式执行所有测试来实现

从Spring Testing文档中:

默认情况下,加载后,已配置的ApplicationContext将重新用于每个测试。因此,每个测试套件仅产生一次安装成本,并且随后的测试执行要快得多。在这种情况下,术语“测试套件”表示所有测试都在同一JVM中运行

主要要点:

  • 注释每个单元测试@SpringBootTest

  • 在主@SpringBootApplication类中加载所有bean和必要的配置类

  • 重要信息:运行JUnit Suite,而不是单个JUnit测试。 在您的IDE中作为一组执行所有测试。

2020-05-30