@SpringBootApplication注解在JUnit Tests中的作用
@SpringBootApplication annotation effects in JUnit Tests
我有一个 spring 引导非网络应用程序。
我已经为我的应用程序添加了一些运行良好的集成测试。
我的主要 class 注释为 @SpringBootApplication
,我的集成测试 class 注释为 @RunWith(SpringRunner.class)
和 @SpringBootTest
。
如果我将主要 class 注释更改为 @Configuration
和 @ComponentScan
@EnableAutoConfiguration
更明确地说,我的测试 class 给出一个编译时错误,说它无法检测到正在使用的 classes 之一,并迫使我添加更多信息。
所以我必须更改注释如下 @RunWith(SpringRunner.class)
和 @SpringBootTest(classes = EligibilityJobRunner.class)
。
我读到 @SpringBootApplication
是上述三个注释的方便注释,那么为什么会有这种差异?非常感谢。
@SpringBootApplication
是一个元注释,它应用的注释比您用它替换的注释更多:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
如果您不想使用 @SpringBootApplication
,请尝试使用以下所有注释来注释您的 class:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
在您的情况下,缺少 @SpringBootConfiguration
。
下次 运行 测试时,在 SpringBootTestContextBootstrapper.java 中的不同点放置调试断点,以查看幕后发生的情况。
但我认为这些行显示了问题所在:
Class<?> found = new SpringBootConfigurationFinder()
.findFromClass(mergedConfig.getTestClass());
Assert.state(found != null,
"Unable to find a @SpringBootConfiguration, you need to use "
+ "@ContextConfiguration or @SpringBootTest(classes=...) "
+ "with your test");
我有一个 spring 引导非网络应用程序。
我已经为我的应用程序添加了一些运行良好的集成测试。
我的主要 class 注释为 @SpringBootApplication
,我的集成测试 class 注释为 @RunWith(SpringRunner.class)
和 @SpringBootTest
。
如果我将主要 class 注释更改为 @Configuration
和 @ComponentScan
@EnableAutoConfiguration
更明确地说,我的测试 class 给出一个编译时错误,说它无法检测到正在使用的 classes 之一,并迫使我添加更多信息。
所以我必须更改注释如下 @RunWith(SpringRunner.class)
和 @SpringBootTest(classes = EligibilityJobRunner.class)
。
我读到 @SpringBootApplication
是上述三个注释的方便注释,那么为什么会有这种差异?非常感谢。
@SpringBootApplication
是一个元注释,它应用的注释比您用它替换的注释更多:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
如果您不想使用 @SpringBootApplication
,请尝试使用以下所有注释来注释您的 class:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
在您的情况下,缺少 @SpringBootConfiguration
。
下次 运行 测试时,在 SpringBootTestContextBootstrapper.java 中的不同点放置调试断点,以查看幕后发生的情况。
但我认为这些行显示了问题所在:
Class<?> found = new SpringBootConfigurationFinder()
.findFromClass(mergedConfig.getTestClass());
Assert.state(found != null,
"Unable to find a @SpringBootConfiguration, you need to use "
+ "@ContextConfiguration or @SpringBootTest(classes=...) "
+ "with your test");