我有一个spring boot非web应用程序。
我为我的应用程序添加了一些运行良好的集成测试。
我的主要类使用@SpringBootApplication
进行注释,我的集成测试类使用@RunWith(SpringRunner.class)
和@SpringBootTest
进行注释。
如果我将主类注释更改为@Configuration
和@ComponentScan
并且@EnableAutoConfiguration
更明确,我的测试类给出编译时错误,说它无法检测正在使用的类之一并强制我添加更多信息。
所以我必须更改@RunWith(SpringRunner.class)
和@SpringBootTest(classes = EligibilityJobRunner.class)
下方的注释。
我已经读过@SpringBootApplication
是上面提到的三个注释的便利注释那么为什么会出现这种差异?非常感谢。
答案 0 :(得分:0)
@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
,请尝试使用以下所有注释注释您的课程:
@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");