我想测试一个简单关闭应用程序的类:@Componentpublic class ShutdownManager { @Autowired private ApplicationContext applicationcontext; public int shutdown(int returnCode) { return SpringApplication.exit(applicationcontext, () -> returnCode); }}我创建的测试用例是这样的:public class ShutdownManagerTest { @Test public void should_shutdown_gracefully() { SpringApplication app = new SpringApplication(TestClass.class); ConfigurableApplicationContext context = app.run(); ShutdownManager shutdownManager = (ShutdownManager)context.getBean("shutdownManager"); int result = shutdownManager.shutdown(10); assertThat(result).isEqualTo(10); } @SpringBootApplication @ImportResource("classpath:/core/shutdownmanagertest.xml") private static class TestClass { public TestClass() { } public static void main(String[] args) { } }}我的 shutdownmanagertest.xml 只包含一个 bean:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="shutdownManager" class="com.mycodebase.ShutdownManager" /></beans>但是,当我运行它时,它会抱怨:Field myOtherService in com.mycodebase.MyTask required a bean of type 'com.mycodebase.MyOtherService ' that could not be found.MyTask 类位于 ShutdownManager 的同一个包中,其中包含一个字段 myOtherService,该字段具有 @Autowire 注释。但它没有在我的测试 xml 中定义,它只包含一个 bean。有人可以帮助我理解为什么它会尝试解析不在上下文中的 bean 吗?爪哇春天弹簧靴
1 回答
慕仙森
TA贡献1827条经验 获得超7个赞
它这样做是因为它是这样@SpringBootApplication
工作的。
这是一个方便的注释,等效于声明 @Configuration、@EnableAutoConfiguration 和@ComponentScan。
如果未定义特定包,将从声明此注解的类的包进行扫描。
因此,ShutdownManagerTest 的同一个包或子包中的所有内容都将被提取。
添加回答
举报
0/150
提交
取消