我想測試一個簡單關閉應用程序的類:@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條經驗 獲得超8個贊
它這樣做是因為它是這樣@SpringBootApplication
工作的。
這是一個方便的注釋,等效于聲明 @Configuration、@EnableAutoConfiguration 和@ComponentScan。
如果未定義特定包,將從聲明此注解的類的包進行掃描。
因此,ShutdownManagerTest 的同一個包或子包中的所有內容都將被提取。
添加回答
舉報
0/150
提交
取消