我希望能够通过使用junit的测试通过不同的类来缓存应用程序上下文。
测试类以这种方式声明:
@SpringBootTest @RunWith(SpringRunner.class) public class SomeIntegrationTest { }
我看到了这个问题,可以跨junit测试类重用spring应用程序上下文,但是在这种情况下,我不使用任何xml,而是要完全启动上下文,而不仅仅是从它中获取几个bean,因此如果我做对了,它@SpringBootTest比xml更合适@ContextConfiguration。
@SpringBootTest
@ContextConfiguration
Ruslan,所以您的问题是如何为JUnit Suite重用Spring Boot Context,对吗?
然后,它几乎是开箱即用的,您只需要使用注释为每个单元测试添加@SpringBootTest注释。
还要确保您的主@SpringBootApplication类正在加载所有必需的@Configuration类,如果@SpringBootApplications在所有配置类上方的根包上,并且继承了该类,则将自动加载所有必需的类@ComponentScan。
@SpringBootApplication
@Configuration
@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中作为一组执行所有测试。